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