日期:2014-05-20  浏览次数:20662 次

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()) {
            
        }
    }
}