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
展开
 我来答
一别永别
2016-09-16 · TA获得超过130个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:128万
展开全部
因为你第一个是共享一个资源m,第二并没有共享各自用各自的5张票
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式