線程帶來的風險(第一章)
線程帶來的風險
- 安全性問題 ----> 安全性的含義是“永遠不發生糟糕的事” 線程安全問題非常複雜,在沒有充分同步的情況下,多個線程中的操作順序是無法預測的。 如果沒有同步,那麼無論是編譯器、硬件還是運行時,都可以隨意安排操作的執行順序和時間,例如對寄存器或者處理器中的變量進行緩存(緩存後成為當前線程的局部變量),而這些被緩存的變量對於其他線程來說是暫時(甚至永久)不可見的。
- 活躍性問題 ----> 活躍性的含義是“正確地事最終會發生” 多線程環境中活躍性問題的常見形式:死鎖、活鎖、饑餓
- 性能問題 性能問題與活躍性密切相關,活躍性意味著某件正確地事最終會發生,性能問題則關注讓其盡快發生。性能問題包含多個方麵,例如服務時間過長、響應不靈敏,吞吐率過低等。
Java中使用鎖來實現同步、原子操作等功能,但鎖的使用會帶來性能方麵的問題。當執行時間較長的計算或者可能無法快速完成的操作時(例如網絡IO、控製台IO),一定不要持有鎖。
最後更新:2017-11-04 17:33:34