猿问

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(); } }加上同步块

NJP

你没有同步锁啊

夜未央arc

对对对

言曌博客liuyanzhao_com

synchronized public void run() {     for(int i=0;i<10;i++) {         while(ticket>0) {             System.out.println("车票:"+ticket--);         }     } }让线程执行 run 方法之前 先排队,加把锁。防止多个线程同时 进入 run 方法,因为谁先进去谁又是先出来 是随机的。
随时随地看视频慕课网APP

相关分类

Java
我要回答