synchronized和reentrantlock 的区别

功能区别:

便利性:很明显Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,所以最好在finally中声明释放锁。

锁的细粒度和灵活度:很明显ReenTrantLock优于Synchronized

ReenTrantLock独有的能力:

1.      ReenTrantLock可以指定是公平锁还是非公平锁。而synchronized只能是非公平锁。所谓的公平锁就是先等待的线程先获得锁。

2.      ReenTrantLock提供了一个Condition(条件)类,用来实现分组唤醒需要唤醒的线程们,而不是像synchronized要么随机唤醒一个线程要么唤醒全部线程。

3.      ReenTrantLock提供了一种能够中断等待锁的线程的机制,通过lock.lockInterruptibly()来实现这个机制。






个人公号:【排骨肉段】,可以关注一下。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 昨天面试,面试官问了自己一个synchronized和ReentrantLock的区别,感觉自己回答的并不是特别好...
    何甜甜在吗阅读 10,203评论 2 12
  • 线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或...
    闽越布衣阅读 783评论 0 6
  • Lock显式锁 在Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和vol...
    史路比阅读 464评论 0 0
  • 风雨飘摇沐青山 涧边杨柳㛞娇妍 云深依旧难知处 流连林海不思还
    平山冷燕_725a阅读 611评论 0 0
  • “胡了!”老姜头推倒手里的麻将,青一色的饼子,看上去很顺眼。“这老姜头今天运气真好,竟你胡了。”说话的是华子媳妇...
    浅行静思xyq阅读 183评论 0 0