synchronized锁的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_33625560/article/details/72967256

对于synchronized,我的理解是相当于为一个对象加上了锁,只有获取到该对象的钥匙即可执行相应的代码。(我理解钥匙相当于对象的句柄,一个对象只有一个句柄,只有拿到句柄打开锁才可以执行,执行完成后句柄位置还原,其他同步代码块抢到这个句柄继续执行,而其他的线程则一直尝试获取句柄,所以说无论是对象内部的同步代码块还是其他线程的同步代码块,若锁住的是同一对象,则为同步执行)
a.多个synchronized可以锁住同一个对象,但是只有一个获取到对象“”钥匙“”的可以得到执行。
b.synchronized 修饰方法,相当于
synchronized(this){
}
c.方法里只有同步代码块里的代码是同步执行的,其他代码仍是异步执行,只不过执行到同步代码块的位置阻塞住了,所以需要注意锁的位置,不适当的话还是会产生脏读

细化的三个结论 :
1.当多个线程同时执行synchronized(x){}同步代码块是呈同步效果
注 : x为同一个对象

2.当其他线程执行x对象中的synchronized同步方法时呈同步效果

3.当其他线程执行x对象中的synchronized(x){}同步代码块时也呈现同步效果,但是如果其他线程调用不加synchronized关键字的方法时,还是异步调用

猜你喜欢

转载自blog.csdn.net/sinat_33625560/article/details/72967256