可重入锁和不可重入锁

a 夏天 提交于 2020-01-07 02:42:55

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

不可重入锁:Synchronized +wait + notifyAll  :不可重入锁:只要有资源拿到锁的时候,其他进程就会等待。

可重入锁: ReentrantLock await unLock : 可重入锁,线程判断是否是本线程上锁,如果是同一线程则 锁count++。

总结:

不可重入锁:只判断这个锁有没有被锁上,只要被锁上申请锁的线程都会被要求等待。实现简单

可重入锁:不仅判断锁有没有被锁上,还会判断锁是谁锁上的,当就是自己锁上的时候,那么他依旧可以再次访问临界资源,并把加锁次数加一。

设计了加锁次数,以在解锁的时候,可以确保所有加锁的过程都解锁了,其他线程才能访问。不然没有加锁的参考值,也就不知道什么时候解锁?解锁多少次?才能保证本线程已经访问完临界资源了可以唤醒其他线程访问了。实现相对复杂。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!