之前以为对于一个同步方法,一个时刻只有一个线程能够访问,这没问题。问题是能别的线程能够访问此对象的其他同步方法吗?同步方法的锁是该类的对象,同步块的锁是括号里的对象。照这样说如果sync_block1和sync_block2的锁都是obj,那么一个线程访问sync_block1的时候,别的线程不能访问sync_block2吧。

解决方案 »

  1.   

    同步方法的话,只要是一个对象的所有同步方法,都相当于是synchronized(this),所以都互斥。同理,只要同步块确定锁得是同一个对象,就也是互斥的。
    但是在同步块中,你可以通过wait来让权,这个略微比较复杂,具体需要去Google相关细节了。
      

  2.   

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

    }
    }
    }貌似jdk5还有lock那种锁 怎么用记不清楚了
      

  3.   

    可以访问的,加锁是在访问时,比如A、B同时访问sync_block1 那肯定只有一个线程能进去,但是C、D访问的是sync_block2 那如果C进去了D就进不去了 synchronized(this)中this是指同一个 但是同步的意思是每个方法一个锁,并不是每个类一个锁,要是每个类一个锁的话就是你说的那种了。
      

  4.   

    你搞错了吧,我看了java并发编程实践,里面说this是指当前对象(和习惯一样)。就算不是,如果synchronized(mobj),mobj是一个属性,这样的话两者情况就不同了。