请问,这个代码应该是三个窗口共同卖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
提交
取消