问答详情
源自:2-3 应用Runnable模拟卖票

这种结果 何解?

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

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

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

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

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


提问者:丶子非鱼 2017-05-23 09:28

个回答

  • 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

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

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

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

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

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

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

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

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