解决方案 »

  1.   

    那就是说比如一个类里有三个同步方法,但是我只要new出几个新的对象我就可以分别操作每个同步方法了?一个对象只能操作一个同步方法,只有当此同步方法执行完了才能在执行其他的同步方法了?
      

  2.   


    你的理解是对的。如果synchronized没有明确对哪个对象加锁的情况下,则是对this对象加锁。但是你可以对指定对象加锁的啊。
    Object lockObj = new Object();public void fun(){
      synchronized(lockObj){
      }
    }
      

  3.   

    1,多个方法的多线程情况
    当synchronized关键字修饰一个方法的时候,该方法叫做同步方法。  Java中的每个对象都有一个锁(lock),或者叫做监视器(monitor),当一个线程访问某个对象的synchronized方法时,将该对象上锁,其他任何线程都无法再去访问该对象的synchronized方法了(这里是指所有的同步方法,而不仅仅是同一个方法),直到之前的那个线程执行方法完毕后(或者是抛出了异常),才将该对象的锁释放掉,其他线程才有可能再去访问该对象的synchronized方法。  注意这时候是给对象上锁,如果是不同的对象,则各个对象之间没有限制关系。2,考虑静态的同步方法
    如果某个synchronized方法是static的,那么当线程访问该方法时,它锁的并不是synchronized方法所在的对象,而是synchronized方法所在的类所对应的Class对象。Java中,无论一个类有多少个对象,这些对象会对应唯一一个Class对象,因此当线程分别访问同一个类的两个对象的两个static,synchronized方法时,它们的执行顺序也是顺序的,也就是说一个线程先去执行方法,执行完毕后另一个线程才开始。