码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:count   blog   finally   否则   构造函数   unlock   ase   adl   his   

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的使用

标签:count   blog   finally   否则   构造函数   unlock   ase   adl   his   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!