publicclassThread2Syn{publicstaticvoidmain(String[]args){MyThread1m=newMyThread1();Threadm1=newThread(m);//为何必须如此执行?????Threadm2=newThread(m);Threadm3=newThr...
public class Thread2Syn {
public static void main(String[] args) {
MyThread1 m=new MyThread1();
Thread m1=new Thread(m);//为何必须如此执行?????
Thread m2=new Thread(m);
Thread m3=new Thread(m);
m1.start();m2.start();m3.start();
}
}
class MyThread1 extends Thread{
private int ticket=5;
public void run(){
for(int i=0;i<10;i++){
synchronized (this) {//this代表ticket,只有一个变量
if(this.ticket>0){
try {
Thread.sleep(500);//买票须有等待时间,不会瞬间卖掉
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("车票"+ticket--);
}
}
}
}
}
运行结果:
车票5
车票4
车票3
车票2
车票1
当我把main方法改成这样之后
MyThread1 m1=new MyThread1();
MyThread1 m2=new MyThread1();
MyThread1 m3=new MyThread1();
m1.start();m2.start();m3.start();
结果是
车票5
车票5
车票5
车票4
车票4
车票4
车票3
车票3
车票3
车票2
车票2
车票2
车票1
车票1
车票1
展开