賣票
package cn.lucky.thread;
/** * @author lucky
*/public class lucky_ticket_runnable implements runnable catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"賣出一張票,剩餘"+(--num)+"張");}}
}}
測試
我們發現,出現了賣同一張票,以及賣票負數的情況,這是為什麼呢?
然後我們分析超賣的情況
那我們如何解決這個問題呢?
這個時候鎖的概念就出現了
方式一:使用同步**塊
@override
public void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"賣出一張票,剩餘"+(--num)+"張");}}
}}
方式二:使用synchronized關鍵字
@override
public synchronized void run() catch (interruptedexception e)
system.out.println(thread.currentthread().getname()+"賣出一張票,剩餘"+(--num)+"張");}}
}
方式三:使用鎖機制
lock l = new reentrantlock();
@override
public void run()
} catch (exception e) finally }}
結果
多執行緒賣票案例
火車站有多個售票視窗,這些售票視窗一塊賣100張票,即100張票被多個視窗共享。用執行緒模擬售票視窗 用輸出語句模擬賣出的票。package com.igeek 03 classname ticketdemo description 多執行緒模擬火車站賣票 date 2018年2月4日 下午1 59...
多執行緒賣票
前置條件 設定總票數 比如20張 開啟多個售票視窗同時進行火車票的售賣 這裡多個視窗代表 多執行緒.代表啟動了多少個執行緒物件 怎麼賣票 借助迴圈 重複賣票動作 使用 while死迴圈 每賣出1張 總票數 操作 什麼時候退出迴圈?發現賣完了,退出迴圈 開啟執行緒 執行 run方法內部邏輯 單執行緒賣...
賣票 多執行緒模擬賣票系統
網上搶票,方便又高效,很舒服。應用多執行緒的同步執行可以模擬很多人搶票,而且不會發生衝突。下面,我們就來利用多執行緒來模擬一把。include include include int tickets 100 定義票數為全域性變數,所以執行緒都可訪問 pthread mutex t mutex 定義互...