面试官:Synchronized用过么?原理是什么?

相信经过这篇专栏前面几篇的铺垫,读者即使在项目中没用过Synchronized关键字,对它的了解也不亚于项目实战了,而且大多数人也都是浮于使用,只是知道用Synchronized关键字能实现同步,那就用呗,甚至连类锁和对象锁也没分开区别,当然了,会用总是好的,不过面试官可不会只问你用过Synchronized没,只要你用过就肯定会深究的,所以这时能说出其一二原理,自然是大大的好。

Synchronized原理,同样也是对该专栏前面几篇博客做个总结

Synchronized关键字是由JVM实现的一种实现互斥同步的一种方式,可以保证线程安全,反编译出带Synchronized程序块的字节码后,可以发现被Synchronized修饰的程序块,前后分别有monitorentermonitorexit这两个字节码指令,然后当虚拟机执行到monitorenter这个指令时,会先尝试获取对象的锁,本质上来说,Synchronized其实是通过在对象头上设置标记,以此达到获取锁和释放锁的目的,所以讲白了Synchronized关键字其实不是锁,可以把它想象成一个动词—加锁,所以使用了Synchronized关键字就会做加锁的操作。如果这时对象没有被锁定,或者当前的线程已经获得了这个对象的锁,那么锁的计数器就会+1,而当执行到monitorexit这个指令时,锁计数器就会-1,直到减到0,这个锁也就被释放了。所以这时那些因为获取锁对象失败,而进入阻塞状态的线程们,就可以去竞争这把锁了,如此反复。

发布了321 篇原创文章 · 获赞 345 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/105365377