欢迎光临散文网 会员登陆 & 注册

Java线程中的卖火车票问题

2020-11-19 16:09 作者:每天一个秃顶小技巧  | 我要投稿

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


  • 1 package lesson;

  • 2 public class Demo1 {

  • 3 public static void main(String[] args) {

  • 4 // TODO Auto-generated method stub

  • 5 Train tt = new Train();

  • 6 Thread t1 = new Thread(tt);

  • 7 Thread t2 = new Thread(tt);

  • 8 Thread t3 = new Thread(tt);

  • 9 Thread t4 = new Thread(tt);

  • 10 t1.setName("窗口1");

  • 11 t2.setName("窗口2");

  • 12 t3.setName("窗口3");

  • 13 t4.setName("窗口4");

  • 14 t1.start();

  • 15 t2.start();

  • 16 t3.start();

  • 17 t4.start();

  • 18 }

  • 19}

  • 20 class Train implements Runnable{

  • 21 int a= 1;

  • 22 @Override

  • 23 public synchronized void run() {//synchronized为进程上锁

  • 24 // TODO Auto-generated method stub

  • 25 while(true) {

  • 26 if(a<=100) {

  • 27 System.out.println(Thread.currentThread().getName()+"卖出"+a+"号票");

  • 28 a++;

  • 29 }

  • 30 try {

  • 31 this.wait(230);

  • 32 Thread.sleep(100);//结果输出只有窗口1卖了所有票如图2所示

  • 33 } catch (InterruptedException e) {

  • 34 // TODO Auto-generated catch block

  • 35 e.printStackTrace();

  • 36 }

  • 37 }

  • 38 }

  • 39 }

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


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


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

常用类JavaString常用类JJavaStringBuilder

Java线程中的卖火车票问题的评论 (共 条)

分享到微博请遵守国家法律