當我們在做壓測或並發測試時,經常會遇到此問題
舉例說明:假設售票系統有1000張票,A和B同時來買票,如果是線程不安全,那么可能售票系統可能出現1000-1去同時執行的情況,最終結果是A和B都買完后剩下999張票,而不是998張。
1、線程安全:
指多個線程在執行同一段代碼的時候采用加鎖機制,使每次的執行結果和單線程執行的結果都是一樣的,不存在執行程序時出現意外結果。
2、線程不安全:
是指不提供加鎖機制保護,有可能出現多個線程先后更改數據造成所得到的數據是臟數據。
擴展資料
1、引起線程安全問題的原因:
線程安全問題都是由全局變量及靜態變量引起的。
若每個線程中對全局變量、靜態變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則的話就可能影響線程安全。
2、解決多線程並發訪問資源安全問題的方法:
(1)synchronized
synchronized關鍵字,就是用來控制線程同步的,保證我們的線程在多線程環境下,不被多個線程同時執行,確保我們數據的完整性,使用方法一般是加在方法上。
(2)Lock
Lock是在Java1.6被引入進來的,Lock的引入讓鎖有了可操作性,是指我們在需要的時候去手動的獲取鎖和釋放鎖,甚至我們還可以中斷獲取以及超時獲取的同步特性,從使用上synchronized使用起來比Lock更方便。
參考資料:百度百科:線程安全