1.基本概念:在多線程環境下調用函數/函數庫時,能正確處理多線程之間的共享變量,使程序功能正常完成。當多個線程訪問同壹個對象時,如果不需要考慮這些線程在運行時環境中的調度和交替執行,就不需要在調用者上執行額外的同步或執行任何其他操作。調用這個對象的行為可以得到正確的結果,那麽這個對象就是線程安全的。換句話說,類或程序提供的接口是對線程的原子操作或者多線程之間的切換不會導致這個接口執行結果的二義性,也就是說我們不用考慮同步問題。
2.舉例:比如某銀行只有1000元,兩個人同時取1000元,就有可能得到總額2000元。為了避免這個問題,銀行在取款時要使用互斥鎖,也就是說在處理同壹個資源時,會在前壹筆取款交易完成後,再處理下壹筆交易。
3.線程安全的重要性:
4.線程是否安全:
5.資源競爭:即多個線程重寫同壹資源時,存在競爭。如果只是讀操作,就不存在資源競爭。
1.基本概念:由於上述線程安全和資源競爭的情況,引入了線程鎖,即通過鎖來限制資源請求,以保證同步執行,避免資源汙染或預期結果不壹致。線程鎖有兩種狀態:鎖定和解鎖。
2.基本方法:
3.使用示例:
如果上面的例子沒有鎖,打印順序會亂序,但是最終結果是正確的,因為即使線程交替執行,最終結果也是壹致的。