Java線程中的賣火車票問題
用Java代碼模擬賣100張火車票問題:四個(gè)售票窗口同時(shí)售票且不能賣出同一張火車票。
代碼如下。
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為進(jìn)程上鎖
24 // TODO Auto-generated method stub
25 while(true) {
26 if(a<=100) {
27 System.out.println(Thread.currentThread().getName()+"賣出"+a+"號(hào)票");
28 a++;
29 }
30 try {
31 this.wait(230);
32 Thread.sleep(100);//結(jié)果輸出只有窗口1賣了所有票如圖2所示
33 } catch (InterruptedException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 }
37 }
38 }
39 }
wait()正常運(yùn)行結(jié)果圖1:

sleep()運(yùn)行結(jié)果如圖2所示:

兩種結(jié)果不同的主要主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。
常用類JavaString常用類JJavaStringBuilder