3个人买5张票java多线程_JAVA多线程问题,两个结果差别到底是因为什么,(实现3个售票窗口的同步售票。票数5张)...

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

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值