香港赛马会三个半波互联网科技Java 杂谈java高级开发群
锁-概念:可重入锁、可中断锁、公平锁、读写锁

2014香港赛马会:锁-概念:可重入锁、可中断锁、公平锁、读写锁

作者: 冷_6986 | 来源:发表于2018-07-04 14:24 被阅读0次

香港赛马会三个半波 www.8temc.cn 可重入锁

指的是在同一个thread中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁。它是基于thread粒度的,per-thread。

不可重入锁

指的是每次使用锁方法时,都需要重新获取锁,即使在同一线程中调用同一方法都需要等待上一个锁的释放。它是基于method粒度的,per-invocation。

可重入锁与不可重复锁的例子

//设计一个锁public class Lock{ private boolean isLocked = false; public synchronized void lock() throws InterruptedException{ while(isLocked){ wait(); } isLocked = true; } public synchronized void unlock(){ isLocked = false; notify(); }}// 不可重入锁public class Count{ Lock lock = new Lock(); public void print(){ lock.lock(); doAdd(); lock.unlock(); } public void doAdd(){ lock.lock(); //do something lock.unlock(); }}

以上就是一个不可重入锁。同一线程多次调用print()方法或则doAdd()方法都会阻塞。

// 可重入锁public class Lock{ boolean isLocked = false; Thread lockedBy = null; int lockedCount = 0; public synchronized void lock() throws InterruptedException{ Thread thread = Thread.currentThread(); while(isLocked && lockedBy != thread){ wait(); } isLocked = true; lockedCount++; lockedBy = thread; } public synchronized void unlock(){ if(Thread.currentThread() == this.lockedBy){ lockedCount--; if(lockedCount == 0){ isLocked = false; notify(); } } }}

以上就是一个可重入锁。只要是同一个thread获取对应的锁之后就可以重复的调用对应的方法,而不需要再次获取锁。

可中断锁

在等待获取锁过程中可中断。注意是在等待锁过程中才可以中断,如果已经获取了锁,中断就无效。

公平锁

按等待获取锁的线程的等待时间进行获取,等待时间长的具有优先获取锁权利。即按先后顺序来持有锁。

读写锁

对资源读取和写入的时候拆分为2部分处理,读的时候可以多线程一起读,写的时候必须同步地写。如:ReentrantReadWriteLock.

网友评论

    本文标题:锁-概念:可重入锁、可中断锁、公平锁、读写锁

    本文链接://www.8temc.cn/subject/nxpeuftx.html

  • 北京市最大单体分布式光伏发电项目并网 2018-09-27
  • 已下架!谷歌最强安卓平板PixelC突然停售 2018-08-16
  • 【十九大·理论新视野】动漫:“社会主义现代化强国”如何建成 2018-08-16
  • “互联网+农村”亟待提速 网络入户遇两大难题 2018-08-12
  • 【学习时刻学思践悟十九大⑤】中央党校郑琦:八项规定仍是全面从严治党重要一环 2018-08-08
  • 【高清】山西:各展才艺迎“五四” 2018-08-05