因为你生成了5个实例每个实例都是独立存在的,互相并不影响,所以非static的init方法就根本不存在同步的问题

解决方案 »

  1.   

    public class Synchronized{
    public static void main(String[] arg)
    {   
    A a= new A();
                      for(int i=0;i<4;i++){
                             
    T t = new T(a);
    t.start();
    }
    }
    }class T extends Thread
    {
       private A a = null;
       public T(A a){
         this.a = a;
       }
       public void run(){
         a.init();
       }
    }class A{// private static synchronized void init()// right, synchronized
    public synchronized void init() // error, no synchronized
    {
    System.out.println("step 1");
    try{
    Thread.sleep(1000);
    }catch(Exception e) {
    System.out.println(e.toString());
    }
    System.out.println("step 2");
    }
    }这样就可以了
      

  2.   

    假如没有加static,互斥锁是针对单个对象的。假如有static,那就是一个互斥锁针对单个类了。
    在每个A都有一个互斥锁的时候,现在有5个A的实例,每个实例对应一个线程T的实例,注意,这里是一一对应,没有一个A的实例同时被两个T实例访问。因此,不会出现线程之间争用一个互斥锁而造成的等待现象。
      

  3.   

    I see, thanks everyone.