猿问
java多线程
请问,这个代码应该是三个窗口共同卖5张票的意思吧,为什么执行出来是42135呢,不应该是54321吗
16k闪存大脑3954634
浏览 2393
回答 4
4回答
HZK135
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(); } }加上同步块
1
0
0
NJP
你没有同步锁啊
2
0
0
夜未央arc
对对对
0
0
0
言曌博客liuyanzhao_com
synchronized public void run() { for(int i=0;i<10;i++) { while(ticket>0) { System.out.println("车票:"+ticket--); } } }让线程执行 run 方法之前 先排队,加把锁。防止多个线程同时 进入 run 方法,因为谁先进去谁又是先出来 是随机的。
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
我要回答