java中线程同步的几种方法

 我来答
巨蟹神算子
2018-05-28 · TA获得超过437个赞
知道小有建树答主
回答量:292
采纳率:90%
帮助的人:112万
展开全部

线程同步主要有以下种方法(示例中是实现计数的功能):

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文档。

ag96net
2018-05-28 · TA获得超过455个赞
知道小有建树答主
回答量:310
采纳率:60%
帮助的人:17.4万
展开全部
java中多线程的实现方法有两种:1.直接继承thread类;2.实现runnable接口;同步的实现方法有五种:1.同步方法;2.同步代码块;3.使用特殊域变量(volatile)实现线程同步;4.使用重入锁实现线程同步;5.使用局部变量实现线程同步 。
其中多线程实现过程中需注意重写或者覆盖run()方法,而对于同步的实现方法中使用较常使用的是利用synchronized编写同步方法和代码块。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式