这种结果 何解?

来源:2-3 应用Runnable模拟卖票

丶子非鱼

2017-05-23 09:28

窗口2买了一张票还剩:3张票

窗口3买了一张票还剩:2张票

窗口3买了一张票还剩:0张票

窗口1买了一张票还剩:3张票

窗口2买了一张票还剩:1张票


写回答 关注

4回答

  • MRCCAN
    2018-05-21 14:54:49

    也是对的,线程执行顺序是随机的

  • 慕用1601367
    2017-12-11 21:25:57
    	public void run() {
    		// TODO Auto-generated method stub
    		while(true){
    			synchronized(lockObj){
    				if(ticketsNum>0){
    					ticketsNum--;
    					System.out.println(Thread.currentThread().getName()+"卖出一张票,剩余"+ticketsNum);
    					//Thread.yield();
    					
    					lockObj.notifyAll();
    				}
    				
    			}
    			
    		}
    
    	}

    这样改就能按顺序输出了

  • 丶子非鱼
    2017-05-23 09:30:42

    我懂了   同时运行的   两个线程都在买票   

    柠檬酱c

    但按理讲cpu在执行任务的时候是不可能同步进行的啊,它不可能同时将一个数减一啊?不知道是我理解有问题还是说这个程序有bug

    2017-08-17 10:07:05

    共 1 条回复 >

  • 丶子非鱼
    2017-05-23 09:29:39

    多运行几次  偶尔是这个结果:

    窗口1买了一张票还剩:4张票

    窗口1买了一张票还剩:3张票

    窗口1买了一张票还剩:2张票

    窗口1买了一张票还剩:1张票

    窗口1买了一张票还剩:0张票


细说多线程之Thread VS Runnable

认识Thread和Runnable的区别,以及使用jstack生成线程快照

55327 学习 · 68 问题

查看课程

相似问题