查看本章節
查看作業目錄
需求說明:
車站只剩 50 張從武漢到北京的車票,現有 3 個視窗售賣,用程式模擬售票的程序,要求使用同步方法保證售票程序中票數的正確性

實作思路:
- 創建 Java 專案,在專案中創建 SellTicketBySync 類,并實作 Runnable 介面
- 定義 int 型別的變數 ticket,表示剩余的車票數量,ticket 初始值為 50
- 創建同步方法 sellTicket(),在該方法體內,判斷 ticket 的值是否大于 0,如果 ticket 的值大于 0,則呼叫Thread.sleep(long mills) 方法,讓執行緒休眠 50 毫秒,并列印出當前視窗的售票情況
- 重寫 run() 方法,在 run() 方法內,定義一個 while 死回圈,在回圈體內,判斷變數 ticket 是否大于 0,如果 ticket 大于 0,呼叫 sellTicket() 方法,如果 ticket 小于等于 0,則結束回圈
- 撰寫測驗類,使用 new Thread(Runnable target,String name) 構造方法,創建 3 條執行緒,引數 target的值為 runnableInstance,指定視窗名稱并賦值給引數 name,呼叫 3 個執行緒物件的 start() 方法,依次啟動 3條執行緒
實作代碼:
public class SellTicketBySync implements Runnable {
private int ticket = 50;//剩余的票數
//重寫run方法
@Override
public void run() {
while (true) {
if (this.ticket > 0) {
SellTicket();
} else {
break;
}
}
}
public synchronized void SellTicket() {
if (ticket > 0) {
try {
//執行緒休眠50毫秒
Thread.sleep(50);
System.out.println(Thread.currentThread().getName()+"出售第"+ticket--+"張車票");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//創建一個Runnable實體
SellTicketBySync sellTicketBySync = new SellTicketBySync();
//創建3條執行緒,并為3條執行緒指定名稱
Thread thread01 = new Thread(sellTicketBySync,"視窗1");
Thread thread02 = new Thread(sellTicketBySync,"視窗2");
Thread thread03 = new Thread(sellTicketBySync,"視窗3");
thread01.start();
thread02.start();
thread03.start();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/136517.html
標籤:其他
上一篇:漫畫:什么是 “灰犀牛事件” ?
