java中线程同步的几种方法

1、同步方法,即使用synchronized关键字修饰方法,例如:public synchronized void add(int c){...}2、同步代码块,即有synchronized关键字修饰的语句块,例如:public void addAndGet(int c){ synchronized(this){ count += c; }}3、使用特殊域变量(volatile)实现线程同步,该方法不能保证...
java中线程同步的几种方法
线程同步主要有以下种方法(示例中是实现计数的功能):
1、同步方法,即使用synchronized关键字修饰方法,例如:
public synchronized void add(int c){...}2、同步代码块,即有synchronized关键字修饰的语句块,例如:
public void addAndGet(int c){ synchronized(this){ count += c; }}3、使用特殊域变量(volatile)实现线程同步,该方法不能保证绝对的同步。
例如:private volatile int count = 0;
4、使用锁实现线程同步,例如:
private Lock lock = new ReentrantLock(); public void add(int c) { lock.lock();//上锁 try{ count += c; }finally{ lock.unlock();//解锁 } }5、使用原子变量实现线程同步,在java的util.concurrent.atomic包中提供了创建了原子类型变量的工具类,例如:
private AtomicInteger count= new AtomicInteger(1);public void add(int c) { count.addAndGet(c);}6、使用局部变量实现线程同步,如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本, 副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。
ThreadLocal 类的常用方法
new ThreadLocal<T>() : 创建一个线程本地变量
get() : 返回此线程局部变量的当前线程副本中的值
initialValue() : 返回此线程局部变量的当前线程的"初始值"
set(T value) : 将此线程局部变量的当前线程副本中的值设置为value
示例代码:
private static ThreadLocal<Integer> count= new ThreadLocal<Integer>(){ @Override protected Integer initialValue(){ return 1; } }; public void add(int c){ count.set(count.get() + c); }7、使用阻塞队列实现,例如LinkedBlockingQueue,具体使用可百度LinkedBlockingQueue的用法或查看java文档。
2018-05-28
java中多线程的实现方法有两种:1.直接继承thread类;2.实现runnable接口;同步的实现方法有五种:1.同步方法;2.同步代码块;3.使用特殊域变量(volatile)实现线程同步;4.使用重入锁实现线程同步;5.使用局部变量实现线程同步 。
其中多线程实现过程中需注意重写或者覆盖run()方法,而对于同步的实现方法中使用较常使用的是利用synchronized编写同步方法和代码块。2018-05-28
mengvlog 阅读 145 次 更新于 2025-09-10 02:59:07 我来答关注问题0
  •  文暄生活科普 多线程同步的几种方式以及sychornized和lock的区别,lock的几个范围...

    多线程同步的几种方式:原子操作:确保在多线程环境下某个操作的原子性,常见的原子操作包括原子变量、原子引用等。信号量:一个计数器,用于控制访问某个共享资源的线程数量,当线程数达到上限时,其他线程必须等待。此外还包括互斥锁、条件变量等同步机制。Synchronized与Lock的区别:内置与接口:Synchronized...

  •  湖北倍领科技 java 总结几种线程异步转同步的方法

    } 同步块中的代码将被锁定,确保在同一时刻只有一个线程可以访问这些代码。与同步方法类似,同步块也可以应用于静态方法,这时锁定的对象是该类对应的java.lang.Class对象。wait()、notify()和notifyAll()方法用于线程间的通信。wait()使线程进入等待状态,释放当前对象的锁;notify()唤醒等待状态的线程,...

  •  深空见闻 java8 多线程 调用同一个方法

    在Java 8中,多线程调用同一个方法可以通过创建线程类继承自Thread类或实现Runnable接口来实现。一、继承Thread类 创建线程类:首先,需要创建一个线程类,这个类继承自Thread类,并重写其中的run()方法。调用方法:在run()方法中,调用需要被多个线程执行的方法。启动线程:然后,创建这个线程类的多个实例...

  •  文暄生活科普 Thread的方法介绍sleep、join、yield、wait、notify等

    1. sleep方法(线程休眠,非锁操作)当一个线程使用Thread.sleep(0)时,它会暂时让出CPU,但不会释放同步锁。这种用法有助于缓解年轻代GC压力,如在快速循环中,通过让线程暂停,让GC有机会执行。2. yield方法(低优先级让步,非锁操作)尽管较少使用,yield让当前线程表示愿意暂时放弃CPU执行,但调度...

  • 线程同步主要有以下种方法(示例中是实现计数的功能):1、同步方法,即使用synchronized关键字修饰方法,例如:public synchronized void add(int c){...}2、同步代码块,即有synchronized关键字修饰的语句块,例如:public void addAndGet(int c){ synchronized(this){ count += c; }}3、使...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部