java同步块
之前以为对于一个同步方法,一个时刻只有一个线程能够访问,这没问题。问题是能别的线程能够访问此对象的其他同步方法吗?同步方法的锁是该类的对象,同步块的锁是括号里的对象。照这样说如果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()) {
}
}
}