首页 > 其他 > 详细

reentrantlock与synchronized的区别.及Atomics的使用

时间:2017-03-27 23:46:23      阅读:220      评论:0      收藏:0      [点我收藏+]

ReentranLock是java.util.concurrent.locks中的一个类.需要显示的进行unclock

  提供了tryLock方法,锁被其他线程持有返回false,否则当前线程会持有锁,并返回true

  可以通过构造函数声明一个公平锁,效率较非公平锁低,按队列顺序获取锁

  提供了ReentrantReadWriteLock,用于读多写少并且读不需要互斥的场景,比互斥锁效率高很多

  ReentranLock的使用:  

  lock.lock();  

  try{

  //do something

  }finally{

  lock.unclock;

  }

  ReentrantReadWriteLock锁的使用:

  lock.writeLock().lock();//lock.readLock().lock();  

  try{

  //do something

  }finally{

  lock.writeLock().unlock();//lock.readLock().unlock();

  }

Atomic

  jdk5增加了java.util.concurrent.atomic包,包含以Atomic开头的类,提供一些原子操作

多线程计算器一般解决办法

public class Demo5 {
    private int count=0;
    public int increase(){
        synchronized(this){
            count+=1;
            return count;
        }
    }
    public int decrease(){
        synchronized(this){
            count-=1;
            return count;
        }
    }

}

采用AtomicInteger后

public class Demo5 {
    private AtomicInteger count=new AtomicInteger();
    public int increase(){
        return count.incrementAndGet();
    }
    public int decrease(){
        return count.decrementAndGet();
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

reentrantlock与synchronized的区别.及Atomics的使用

原文:http://www.cnblogs.com/2nao/p/6629518.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!