多執行緒賣票,執行緒鎖練習。

2021-08-19 14:19:15 字數 1454 閱讀 7106

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...