JAVA多线程问题,两个结果差别到底是因为什么,(实现3个售票窗口的同步售票。票数5张)
publicclassThread2Syn{publicstaticvoidmain(String[]args){MyThread1m=newMyThread1();Th...
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 展开
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 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询