楼主:你这里是三个窗口分别用三个线程售三套票(每套都是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();
其实只需要创建一个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();
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张票
那么你需要在多个线程之间共享该对象才能达到效果
但是你的代码中却是每个线程单独的拥有一个Window对象~