【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
不可重入锁:Synchronized +wait + notifyAll :不可重入锁:只要有资源拿到锁的时候,其他进程就会等待。
可重入锁: ReentrantLock await unLock : 可重入锁,线程判断是否是本线程上锁,如果是同一线程则 锁count++。
总结:
不可重入锁:只判断这个锁有没有被锁上,只要被锁上申请锁的线程都会被要求等待。实现简单
可重入锁:不仅判断锁有没有被锁上,还会判断锁是谁锁上的,当就是自己锁上的时候,那么他依旧可以再次访问临界资源,并把加锁次数加一。
设计了加锁次数,以在解锁的时候,可以确保所有加锁的过程都解锁了,其他线程才能访问。不然没有加锁的参考值,也就不知道什么时候解锁?解锁多少次?才能保证本线程已经访问完临界资源了可以唤醒其他线程访问了。实现相对复杂。
来源:oschina
链接:https://my.oschina.net/u/2870118/blog/3152644