关于 synchronized 特性

1、synchronized的可重入性
可重入特性:一个线程得到一个对象锁后再次请求该对象锁,是允许的;当子类继承父类时,子类也是可以通过可重入锁调用父类的同步方法
可重入原理:每一个锁关联一个线程持有者和计数器,当计数器为 0 时表示该锁没有被任何线程持有,那么任何线程都可能获得该锁而调用相应的方法;当某一线程请求成功后,JVM会记下锁的持有线程,并且将计数器置为 1;此时其它线程请求该锁,则必须等待;而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增;当线程退出同步代码块时,计数器会递减,如果计数器为 0,则释放该锁
可重入的作用:可以避免死锁;可以让我们更好的来组织代码

2、不可中断:对于synchronized来说,如果一个线程在等待锁,那么结果只有两种,要么它获得这把锁继续执行,要么它就保存等待,即使调用中断线程的方法,也不会生效。

3、非公平:在默认情况下,notify 每次从wait取一个线程放在cq首部,后面monitor.exit 默认情况下,会把cq放在entryset首部,再从头部哪一个线程唤醒,有可能唤醒的就是刚刚notify的,而不是因为刚刚竞争锁失败,杠杆进入到cq或者之前notify操作,先前进入到entryset的线程。
https://blog.csdn.net/jalja365/article/details/111298466

posted @ 2021-08-09 21:09  TomStudio  阅读(177)  评论(0)    收藏  举报