线程调用同步方法

当一个线程A调用一个对象的同步(Syncronized)方法,如果线程A中没有wait方法,那么其他线程就不能调用该对象中的同步方法了,但是可以调用非同步方法。

这是因为,(非静态的)同步方法的同步锁是当前类的对象(this),当一个线程调用同步方法时,就持有了该对象锁,在方法内部没有wait方法时,其他线程调用此对象的同步方法时也需要获得此对象this对象锁,但是该锁被A持有,所以其他线程访问不了。但是如果A线程调用同步方法中遇到wait,就会释放锁了,此时其他线程就可以调用同步方法了。

对于static Syncronized方法,它的锁是类名.Class

原文地址:https://www.cnblogs.com/xiaolovewei/p/8004168.html