Java线程中的卖火车票问题

   日期:2020-11-13     浏览:82    评论:0    
核心提示:用Java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票。代码如下。package lesson;public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub Train tt = new Train(); Thread t1 = new Thread(tt); Thread t2 = new Thread(tt); Thr

用Java代码模拟卖100张火车票问题:四个售票窗口同时售票且不能卖出同一张火车票。
代码如下。

package lesson;
public class Demo1 { 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub
		Train tt = new Train();
		Thread t1 = new Thread(tt);
		Thread t2 = new Thread(tt);
		Thread t3 = new Thread(tt);
		Thread t4 = new Thread(tt);
		t1.setName("窗口1");
		t2.setName("窗口2");
		t3.setName("窗口3");
		t4.setName("窗口4");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}
class Train implements Runnable{ 
	int a= 1;
	@Override
	public synchronized void run() { //synchronized为进程上锁
		// TODO Auto-generated method stub
		while(true) { 
			if(a<=100) { 
		System.out.println(Thread.currentThread().getName()+"卖出"+a+"号票");
				a++;
			}
			try { 
				this.wait(230);
// Thread.sleep(100);//结果输出只有窗口1卖了所有票如图2所示
			} catch (InterruptedException e) { 
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

wait()正常运行结果图1:

sleep()运行结果如图2所示:

两种结果不同的主要主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服