synchronized学习笔记1:
**1.**synchronized取得的锁是对象锁,哪个方法取得了带synchronized关键字的方法,哪个线程就取得了改线程的对象锁,前提多个线程同时访问同一个对象。
2.线程A持有对象object的对象锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法。
3.线程A调用object中的同步方法synchronized void funcA()时候,持有了对象object的对象锁,如果此时线程B调用object中的同步方法synchronized void funcB()时候,必须等待线程A释放对象锁。
**4.**synchronized支持锁重入(linux内核的自旋锁不支持重入,会造成死锁),若不支持重入,会出现:
线程A调用了object的synchronized void funcA(),此时线程A获得了object的对象锁,但是在funcA()内部,继续调用object的synchronized 方法,有与object的锁还没有释放,将会在这里等待,funcA()内部等待外部释放锁,funcA()外部方法卡在内部调用synchronized方法这里,互相等待,造成死锁。
5.当存在父子继承关系时,子类完全可以通过可重入锁调用父类同步方法的
6.当一个线程访问object中的一个synchronized(this)同步代码块时,其他线程中所有其他synchronized(this)同步代码块的访问将会被阻塞。
synchronized学习笔记1
最新推荐文章于 2024-11-04 20:33:37 发布