多線程的優點:
1 多核利用
2 為單個任務建模方便
3 異步處理不同事件,不必盲等
4 現代的UI也需要它
風險:
1 同步變量易錯誤
2 因資源限制導致線程活躍性問題
3 因2導致的性能問題
用途:
框架,UI,Backend
線程安全的本質是什么:
并非是線程和鎖,這些只是基礎結構,本質是如何控制共享變量訪問的狀態
什么是線程安全:
就是線程之間的執行
還沒有發生錯誤,就是沒有發生意外
一個線程安全的類本身封裝了對類內部方法和變量的異步請求,調用方無需考慮線程安全問題
無狀態的變量總是線程安全的
原子性:
完整執行的單元,如不加鎖控制,則會發生競態條件,如不加鎖的懶漢單例模式,或者復合操作。
鎖,內在鎖,重入:
利用synchronized關鍵字控制訪問單元,同一線程可以重入鎖內部,避免了面向對象產生的問題。同一變量的所有出現場合應該使用同一個鎖來控制。synchronized(lock)。
即使所有方法都用synchronized控制也不能保證線程安全,它可能在調用時編程復合操作。
活躍性和性能問題:
過大的粒度會導致這個問題,用鎖進行異步控制,導致了線程的順序執行。
簡單和性能是一對矛盾,需要適當的取舍。不能在沒有考慮成熟的情況下,為了性能去犧牲簡潔性。
要盡量避免耗時操作,IO和網絡操作中使用鎖
@2008 楊一. 版權所有. 保留所有權利