读书人

最简略高效的tryLock

发布时间: 2012-09-16 17:33:16 作者: rapoo

最简单高效的tryLock
Java代码
1.import java.util.concurrent.atomic.AtomicBoolean;
2.
3./**
4. * @author asme2u
5. */
6.public class Lock {
7.
8. private AtomicBoolean lock = new AtomicBoolean(true);
9.
10. public boolean tryLock() {
11. return lock.compareAndSet(true, false);
12. }
13.
14. public void unlock() {
15. lock.set(true);
16. }
17.
18.}

原理:CAS

优点:
速度快,约是ReentrantLock的2-3倍

缺点:
需JDK5.0+
无条件对象且不可重入
未获取锁时直接调用unlock不抛IllegalMonitorStateException所以代码必须严格保证获取锁后才能调用unlock

适用场景:
不需要条件对象且当ReentrantLock的tryLock影响了你的性能的时候

我的应用场景:
最近项目中通信程序中的客户端的socket长连接的连接池,客户端使用连接具有高并发但占用连接时间非常短的特点,使用这个类代替ReentrantLock,性能提高了3倍左右

读书人网 >编程

热点推荐