之前以为对于一个同步方法,一个时刻只有一个线程能够访问,这没问题。问题是能别的线程能够访问此对象的其他同步方法吗?同步方法的锁是该类的对象,同步块的锁是括号里的对象。照这样说如果sync_block1和sync_block2的锁都是obj,那么一个线程访问sync_block1的时候,别的线程不能访问sync_block2吧。
------解决方案--------------------
同步方法的话,只要是一个对象的所有同步方法,都相当于是synchronized(this),所以都互斥。
同理,只要同步块确定锁得是同一个对象,就也是互斥的。
但是在同步块中,你可以通过wait来让权,这个略微比较复杂,具体需要去Google相关细节了。
------解决方案--------------------
- Java code
class Test{ public static synchronized void mm(){} public static synchronized void kk(){} public synchronized void gg(){} public void jj(){ synchronized (this) { } } public void dd(){ synchronized (this.getClass()) { } }}