用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方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/209127.html
標籤:其他
上一篇:Day41專案saas-export專案-加鹽加密**
下一篇:湖湘杯 | Misc Wp
