问题
(1)synchronized的特性?
(2)synchronized的实现原理?
(3)synchronized是否可重入?
(4)synchronized是否是公平锁?
(5)synchronized的优化?
(6)synchronized的五种使用方式?
实现原理
在学习Java内存模型的时候,我们介绍过两个指令:lock 和 unlock。
- lock,锁定,作用于主内存的变量,它把主内存中的变量标识为一条线程独占状态。
- unlock,解锁,作用于主内存的变量,它把锁定的变量释放出来,释放出来的变量才可以被其它线程锁定。
但是这两个指令并没有直接提供给用户使用,而是提供了两个更高层次的指令 monitorenter 和 monitorexit 来隐式地使用 lock 和 unlock 指令。
而 synchronized 就是使用 monit