public class counter
public int getcount()
public void setcount(int count)
public void reduce()
}
首先計數器類,模擬火車賣票計數器。
public class sellthread extends thread
@override
public void run()
}
這個是賣票的執行緒,如果計數器裡的count 大於0 就一直賣直到賣完為止。
public class test
}
這是測試類,開啟五個執行緒賣票,相當於是開了五個視窗同時賣票。現在執行一下,結果如下
因為賣票的操作不是乙個原子操作,所以出現這樣的問題,步驟大概是
1.讀取當前的票數
2.當前票數減1
3.把減少後的票數再賦給計數器
改進了一下之後,發現效果是實現了,但是好像所有的票都是由第乙個執行緒在賣。這個鎖應該是gg了,毛病。
然後又改進了一下,吧鎖放在迴圈裡面,發現,他進迴圈的時候count都是大於0的,但是進去只有其他的視窗把票賣完了,然後這邊還不知道,還在賣。。。這就又gg了。
然後又改進了下賣票的方法,貌似效果是達到了,五個視窗同時賣票,並且賣完就不能賣了。但是我知道這肯定是有毛病。
這個還得再想想辦法,這樣太low了。
剛剛又寫了幾個demo,突然發現是自己二筆了。我就糾結為毛總是多了五次迴圈賣,但是又沒票。
突然發現我開了五個執行緒去賣,當其中乙個執行緒發現票賣完了的時候,這個迴圈break了。這個鎖釋放了,
但是其他的四個執行緒while還在執行,所以他要每乙個都判斷了 count <= 0 然後結束迴圈。我還糾結半天
emmmmmm,二筆了。其實在counter裡reduce方法裡鎖一下就行了。
多執行緒賣票
前置條件 設定總票數 比如20張 開啟多個售票視窗同時進行火車票的售賣 這裡多個視窗代表 多執行緒.代表啟動了多少個執行緒物件 怎麼賣票 借助迴圈 重複賣票動作 使用 while死迴圈 每賣出1張 總票數 操作 什麼時候退出迴圈?發現賣完了,退出迴圈 開啟執行緒 執行 run方法內部邏輯 單執行緒賣...
賣票 多執行緒模擬賣票系統
網上搶票,方便又高效,很舒服。應用多執行緒的同步執行可以模擬很多人搶票,而且不會發生衝突。下面,我們就來利用多執行緒來模擬一把。include include include int tickets 100 定義票數為全域性變數,所以執行緒都可訪問 pthread mutex t mutex 定義互...
Java 多執行緒賣票
在實際應用中,我們經常用到多執行緒,如車站的售票系統,車站的各個售票口相當於各個執行緒。當我們做這個系統的時候可能會想到兩種方式來實現,繼承thread類或實現runnable介面,現在看一下這兩種方式實現的兩種結果。class mythread extends thread public void...