Java中的锁机制如何改写为支持长尾词的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1332个文字,预计阅读时间需要6分钟。
公平锁与非公平锁:公平锁按照请求锁的顺序依次分配锁,非公平锁则不考虑请求顺序,可能在任何时候获取锁。例如,synchronize是非公平锁,ReentrantLock既可以是公平锁也可以是非公平锁。
公平锁和非公平锁公平锁就是按照先来先服务、非公平就是不管你什么时候来,唤醒的时候都是随即唤醒。例如synchronize就是非公平锁,ReentrantLock既可以作为公平锁,也可以作为非公平锁。
可重入锁可重入锁就是说某个线程已经获取到某个锁,这个线程跨域在次获取到这个锁而不会出现死锁。synchronize和ReentrantLock都是可重入锁。需要注意的是ReentrantLock锁需要手动释放锁、并且加锁次数要和释放次数一致。
好处:同一个线程访问这个对象就不需要等上一把锁释放我才能访问,减少代码复杂度;
//就比如我想要在第一个方法里面执行第二个方法,由于两个方法都加了锁,如果没有可重入锁,这个程序是允许不了的。
本文共计1332个文字,预计阅读时间需要6分钟。
公平锁与非公平锁:公平锁按照请求锁的顺序依次分配锁,非公平锁则不考虑请求顺序,可能在任何时候获取锁。例如,synchronize是非公平锁,ReentrantLock既可以是公平锁也可以是非公平锁。
公平锁和非公平锁公平锁就是按照先来先服务、非公平就是不管你什么时候来,唤醒的时候都是随即唤醒。例如synchronize就是非公平锁,ReentrantLock既可以作为公平锁,也可以作为非公平锁。
可重入锁可重入锁就是说某个线程已经获取到某个锁,这个线程跨域在次获取到这个锁而不会出现死锁。synchronize和ReentrantLock都是可重入锁。需要注意的是ReentrantLock锁需要手动释放锁、并且加锁次数要和释放次数一致。
好处:同一个线程访问这个对象就不需要等上一把锁释放我才能访问,减少代码复杂度;
//就比如我想要在第一个方法里面执行第二个方法,由于两个方法都加了锁,如果没有可重入锁,这个程序是允许不了的。

