Synchronized和Lock的区别

2019/04/21 13:55
阅读数 52

锁类型:

可重入锁:在执行对象中所有的同步方法时,不必再次去获取锁

可中断锁:在等待获取锁过程中可中断

读写锁:对线程的读写分为两个部分,读过程中多线程可一起访问readLock,写过程中必须同步一起读

公平锁:按照等待获取锁时间长的长短来获取锁,等待越长的具有优先获得锁的权利

 

Synchronized

存在层次上:java的关键字,在jvm层面

锁的释放:以获取锁的代码块执行完毕释放,若是异常,jvm则会让线程释放锁

锁的阻塞:若是A线程获得锁,则B等待;若是A出现阻塞,则B一直处于阻塞

锁状态:无法判断

锁类型:可重入、非公平、不可中断

性能:少量同步

 

Lock

存在层次上:java

锁的释放:在finally中必须释放锁,lock.unlock,否则会造成死锁

锁的阻塞:分情况而定,线程可以尝试获得锁,线程可以不用一直等待,主要是参考Lock接口中的lockInterruptibly()方法

锁状态:可以判断,可以通过trylock()方法来得知当前线程是否获得锁

锁类型:可重入、公平(亦可非公平)、可中断;ReentrantLock中默认是非公平锁的,new NofairSync

性能:大量同步

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部