最简单高效的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倍左右

你可能感兴趣的:(Lock)