用户工具

站点工具


分享:技术:多线程:synchronized和lock的区别

synchronized和lock的区别

相同点

Lock能完成synchronized所实现的所有功能

不同点

  1. Lock有比synchronized更精确的线程语义和更好的性能。
  2. synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
  3. 资源竞争不激烈,Synchronized的性能要优于ReetrantLock
  4. 资源竞争很激烈,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态

synchronized用法

  1. 锁代码块
  2. 锁方法

ReentrantLock用法

  1. lock(), 如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁
  2. tryLock(), 如果获取了锁立即返回true,如果别的线程正持有锁,立即返回false;
  3. tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回true,如果等待超时,返回false;
  4. lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断
分享/技术/多线程/synchronized和lock的区别.txt · 最后更改: 2017/05/15 06:45 由 gxx