为了账号安全,请及时绑定邮箱和手机立即绑定

java多线程

java多线程

16k闪存大脑3954634 2017-09-20 11:35:38
请问,这个代码应该是三个窗口共同卖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();
	}
}

加上同步块

查看完整回答
1 反对 回复 2017-09-20
?
NJP

TA贡献32条经验 获得超39个赞

你没有同步锁啊

查看完整回答
2 反对 回复 2017-09-26
?
夜未央arc

TA贡献9条经验 获得超2个赞

对对对

查看完整回答
反对 回复 2017-09-25
?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超116个赞

synchronized public void run() {
    for(int i=0;i<10;i++) {
        while(ticket>0) {
            System.out.println("车票:"+ticket--);
        }
    }
}

让线程执行 run 方法之前 先排队,加把锁。防止多个线程同时 进入 run 方法,因为谁先进去谁又是先出来 是随机的。

查看完整回答
反对 回复 2017-09-20
  • 4 回答
  • 4 关注
  • 2336 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信