你的synchronized是加在this,也就是当前对象上的。而你两个线程中创建了两个不同的Timer对象。
同步当然没有效果了。

解决方案 »

  1.   

    你的写法创建了两个Timer对象,怎么可能同步?
    public class CopyOfTestSys1 extends Thread {
    private Timer t; CopyOfTestSys1(Timer t){
    this.t = t;
    }
    public static void main(String[] args) throws InterruptedException {
    Timer tt = new Timer();
    Thread thread1 = new CopyOfTestSys1(tt);
    Thread thread2 = new CopyOfTestSys1(tt);
    thread1.start();
    thread2.start();
    } @Override
    public void run() {
    t.add(Thread.currentThread().getName());
    }}
      

  2.   

    改成这样:
    Thread thread1 = new CopyOfTestSys1(t);
     Thread thread2 = new CopyOfTestSys1(t);
      

  3.   

    同上面各位同学:两个Timer是无法实现同步的。改为如下:
    public class CopyOfTestSys1 extends Thread {
        private Timer t;
     
        CopyOfTestSys1(Timer t){
            this.t = t;
        }
        public static void main(String[] args) throws InterruptedException {
            Timer tt = new Timer();
            Thread thread1 = new CopyOfTestSys1(tt);
            Thread thread2 = new CopyOfTestSys1(tt);
            thread1.start();
            thread2.start();
        }
     
        @Override
        public void run() {
            t.add(Thread.currentThread().getName());
        }
     
    }public class Timer {
         private static int number=0;
         public synchronized void  add(String name){
         number++;
         try {
            Thread.sleep(1);
     } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
       System.out.println( number  ); } 
       
      
     } 
      

  4.   


     
    public class Timer {
         private static int number=0;
        private static Object lock = new Object();
         public void  add(String name){
    synchronized (lock){
         number++;
         try {
            Thread.sleep(1);
     } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
       System.out.println( number  );
     }
     } 
        
       
     }