?????本篇文章講解的知識點主要圍繞多執行緒,廢話不多說,只分享Java相關的干貨!
執行緒的同步
為什么需要同步
【示例代碼】,取得 0~10 的和采用相同的執行緒物件啟用兩個執行緒進行計算(共享一個物件啟動兩個執行緒)



以上 t1 和 t2 并發執行,s 為每個執行緒的區域變數,位于各自的堆疊幀中,因為堆疊幀中的資料是不會互相干擾的,所有計算結果都為 45
【示例代碼】,取得 0~10 的和采用兩個執行緒進行計算,將s 改為成員變數(共享一個物件啟動兩個執行緒)




為什么出現以上的問題,因為共享了同一個物件的成員變數s,兩個執行緒同時對其進行操作, 所以產生了問題,此時稱為此時 Processor 為執行緒不安全的,如果想得到正確的結果,必須采用執行緒同步,加鎖,該變數不能共享使用
???????使用執行緒同步
執行緒同步,指某一個時刻,指允許一個執行緒來訪問共享資源,執行緒同步其實是對物件加鎖,如果物件中的方法都是同步方法,那么某一時刻只能執行一個方法,采用執行緒同步解決以上的問題,我們只要保證執行緒一操作s 時,執行緒2 不允許操作即可,只有執行緒一使用完成s 后,再讓執行緒二來使用s 變數



執行正確
以上示例,如果不采用執行緒同步如何解決?可以讓每個執行緒創建一個物件,這樣在堆中就不會出現物件的狀態共享了,從而可以避免執行緒安全問題
???????為每一個執行緒創建一個物件來解決執行緒安全問題



以上輸出完全正確,每個執行緒操作的是自己的物件,沒有操作共享的資源

以上就是多執行緒相關的知識點,持續更新中,配套視頻教程👇,正在學習Java的同學們一定要關注哦~~
Java零基礎進階視頻教程
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265643.html
標籤:其他
下一篇:四史教育自動答題Java程式
