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

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();
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2017-03-27 23:40  我_会飞的鱼  阅读(556)  评论(0编辑  收藏  举报