详谈锁与同步的区别

  

  

线程A和B都要获取对象O的锁定,假设一个获取了对象阿锁,B将等待一个释放对O的锁定,

  

如果使用同步,如果一个不释放,B将一直等下去,不能被中断

  

如果使用ReentrantLock,如果一个不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情

  

  

如果获取了锁立即返回,如果别的线程持有锁,当前线程则一直处于休眠状态,直到获取锁

  

如果获取了锁立即返回真,如果别的线程正持有锁,立即返回假;

  

如果获取了锁定立即返回真,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就返回真,如果等待超时,返回假;

  

如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断

  

,锁是通过代码实现的,JVM会自动释放锁定(代码执行完成或者出现异常),但是使用锁则不行,要保证锁定一定会被释放,就必须将解锁()放到最后{}中。

  

、同步的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,同步的性能会下降几十倍,但是ReetrantLock的性能能维持常态;

  

以上这篇详谈锁与同步的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

详谈锁与同步的区别