synchronized和ReentrantLock区别,用新的lock有什么好处?举例说说

  1. 原始构成:synchronized是JVM层面的,底层通过monitorenter和monitorexit来实现的。Lock是JDK API层面的。(synchronized一个enter会有两个exit,一个是正常退出,一个是异常退出(保证肯定可以退出))
  2. 使用方法:synchronized不需要手动释放锁,而Lock需要手动释放。
  3. 是否可中断:synchronized不可中断,除非抛出异常或者正常运行完成。Lock是可中断的,1.设置超时方法tryLock(long timeout,TimeUnit unit); 2. lockInterruptibly()方法放代码块中,调用interrupt()
  4. 是否为公平锁:synchronized只能是非公平锁,而ReentrantLock既能是公平锁,又能是非公平锁,构造方法传入false/true,默认是非公平锁false。
  5. 绑定多个条件:synchronized不能,只能随机唤醒。而Lock可以通过Condition来绑定多个条件,精确唤醒。
发布了83 篇原创文章 · 获赞 61 · 访问量 9172

猜你喜欢

转载自blog.csdn.net/weixin_43736084/article/details/103876930