什么是線程安全和線程不安全(解釋並發問題)


當我們在做壓測或並發測試時,經常會遇到此問題

舉例說明:假設售票系統有1000張票,A和B同時來買票,如果是線程不安全,那么可能售票系統可能出現1000-1去同時執行的情況,最終結果是A和B都買完后剩下999張票,而不是998張。

 

1、線程安全:

指多個線程在執行同一段代碼的時候采用加鎖機制,使每次的執行結果和單線程執行的結果都是一樣的,不存在執行程序時出現意外結果。

2、線程不安全:

是指不提供加鎖機制保護,有可能出現多個線程先后更改數據造成所得到的數據是臟數據。

 

擴展資料

1、引起線程安全問題的原因:

線程安全問題都是由全局變量及靜態變量引起的。

若每個線程中對全局變量、靜態變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則的話就可能影響線程安全。

2、解決多線程並發訪問資源安全問題的方法:

(1)synchronized

synchronized關鍵字,就是用來控制線程同步的,保證我們的線程在多線程環境下,不被多個線程同時執行,確保我們數據的完整性,使用方法一般是加在方法上。

(2)Lock

Lock是在Java1.6被引入進來的,Lock的引入讓鎖有了可操作性,是指我們在需要的時候去手動的獲取鎖和釋放鎖,甚至我們還可以中斷獲取以及超時獲取的同步特性,從使用上synchronized使用起來比Lock更方便。

參考資料:百度百科:線程安全


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM