楼主:你这里是三个窗口分别用三个线程售三套票(每套都是2000张),他们三个线程是完全独立的,连售的票都不是一处的,所以你用synchronized(this)肯定无法同步;
其实只需要创建一个window对象,然后这样就行了应该   window w1=new window();
   Thread t1=new Thread(w1);
    t1.start();
    Thread t2=new Thread(w1);
    t2.start();
    Thread t3=new Thread(w1);
    t3.start();

解决方案 »

  1.   

    创建一个窗口对象就可以了
    class window implements Runnable{ 
        //假定有2000张票
        private  int num=10;
    public void run() {
         
           while(true)
          {
             synchronized(this){
                  
                 try {
                     Thread.sleep(1000);
                 } catch (InterruptedException e) {
                  e.printStackTrace();
                   }
                  
               if(num>0){
                  System.out.println(Thread.currentThread().getName()+"正在售出第"+num+"张票");
                  num--;
                }else {break;}
             }
          }
       
    }
    }
    public class ThreadDemo01 {
         
    public static void  main(String[] args)
     {  //3个售票窗口同时售票
        window w1=new window();
    //     window w2=new window();
    //     window w3=new window();
         
        Thread t1=new Thread(w1);
        t1.start();
        Thread t2=new Thread(w1);
        t2.start();
        Thread t3=new Thread(w1);
        t3.start();
        }
     
    }
    结果:
    Thread-1正在售出第10张票
    Thread-1正在售出第9张票
    Thread-2正在售出第8张票
    Thread-0正在售出第7张票
    Thread-0正在售出第6张票
    Thread-2正在售出第5张票
    Thread-2正在售出第4张票
    Thread-1正在售出第3张票
    Thread-1正在售出第2张票
    Thread-1正在售出第1张票
      

  2.   

    你用的是synchronized方法,那么锁住的就是该对象
    那么你需要在多个线程之间共享该对象才能达到效果
    但是你的代码中却是每个线程单独的拥有一个Window对象~