synchronized lock 解读

2017-08-02  本文已影响0人  sunshaohua520

synchronized lock是java 解决并发问题常用的两种方式,都能保证同一时间只能有一个线程执行。他们的区别?

1.synchronized 可以修饰普通方法,代码块,静态类。lock 只能放在代码中。

2.synchronized 修饰,线程A在执行,则线程B一直等待,直到A释放锁,而ReentrantLock 则是在等待指定时间后中断。

3.synchronized 在jvm 层实现,只有代码执行完毕或出现异常才可退出,而ReentrantLock 是由代码实现,退出只能执行finanlly{} 里的unlock()。

4.竞争不是很激烈的情况下,synchronized效率高于ReentrantLock,反之成立。

5.lock 有读写锁和可重入锁(可重入读锁、可重入写锁、读锁升级写锁、写锁降级读锁),而synchronized没有

原理:

每个对象都有一个监视器(monitor),在线程进入monitor 时,会尝试获取monitor 的所有权,如果进入数为0,则获取锁,将进入数修改为1,即拥有该monitor 的所有权,如果进入数为1,则进入阻塞直到monitor 进入数为0.

上一篇 下一篇

猜你喜欢

热点阅读