Java 多執行緒存在的安全問題

2021-08-09 00:03:51 字數 508 閱讀 7989

/*

存在的問題:

當num=1時,假如執行緒t1此時拿到cpu,執行任務**,在判斷if語句條件剛剛結束時,也就是還沒來得及執行輸出語句,cpu被t2搶走了,此時num依然等於1,那麼if條件通過,在執行過程中,依然可能被其他執行緒搶走cpu而進入阻塞狀態,最後有可能賣出0,-1,-2這種票,這就是多執行緒存在的安全問題

*/class

ticket

implements

runnablecatch(interruptedexception e)

system.out.println(thread.currentthread().getname()+"...sale..."+num--); }}

}}class

test

}

執行結果:

Java多執行緒4 安全問題

這樣的執行機制就可能會導致多執行緒的安全問題 1.多個執行緒操作共享資料 2.在乙個執行緒中有多行 操作共享資料 改變共享資料 解決思路 乙個執行緒在執行執行緒任務的時候將多條操作共享資料的 一起執行,在執行過程中不允許其他執行緒執行 體現 package thread class tickets ...

Java多執行緒的安全問題(02)

要求 在電影院有三個視窗同時賣電影票 50張 啟動3條執行緒,每1條執行緒代表乙個售票視窗。1 定義賣票的執行緒。class saleticketthread extends thread override public void run else 因為多個視窗共享著這50張票,所以設定num成員屬...

多執行緒安全問題

這裡的安全問題可以理解為 實現在邏輯上的問題,比如 火車站賣票 100張票讓4個人去賣,一定不能出現賣的票是負數問題,那麼開啟多執行緒後,如何才能保證賣的票不可能存在負數呢?常用的解決方法有兩種 1,使用同步 塊,把需要同步的 再放同步 塊中 2,使用同步函式 同步的鎖,可以理解為就是那個物件!同步...