ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### ReentrantLock\(重入锁\) ReentrantLock主要利用CAS+CLH队列来实现。它支持公平锁和非公平锁,两者的实现类似; * CAS:Compare and Swap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe这个类通过JNI调用CPU底层指令实现 * CLH队列:带头结点的双向非循环链表\(详见1.6.3CLH锁\) #### 使用方法 ``` Lock lock = new ReentrantLock(); lock.lock(); try { } catch (Exception e) { } finally { lock.unlock(); } ``` 不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放 #### 重要方法 ![](https://img.kancloud.cn/16/84/168489ffc80017cbfb96173606ab6aaa_855x173.png)