请问,这个代码应该是三个窗口共同卖5张票的意思吧,为什么执行出来是42135呢,不应该是54321吗
4 回答
已采纳
HZK135
TA贡献10条经验 获得超3个赞
public class MyThread implements Runnable {
private int ticket = 10;
Object obj=new Object();
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
synchronized (obj) {
if(ticket>0) {
Thread t = Thread.currentThread();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(t.getName()+" ticket: "+ticket--);
}else {
break;
}
}
}
}
public static void main(String[] args) {
Runnable r = new MyThread();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
Thread t3 = new Thread(r);
t1.start();
t2.start();
t3.start();
}
}加上同步块
言曌博客liuyanzhao_com
TA贡献164条经验 获得超117个赞
synchronized public void run() {
for(int i=0;i<10;i++) {
while(ticket>0) {
System.out.println("车票:"+ticket--);
}
}
}让线程执行 run 方法之前 先排队,加把锁。防止多个线程同时 进入 run 方法,因为谁先进去谁又是先出来 是随机的。
添加回答
举报
0/150
提交
取消
