Java线程中的卖火车票问题
用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方法释放了锁,使得其他线程可以使用同步控制块或者方法。