線程帶來的風險
- 安全性問題 ----> 安全性的含義是「永遠不發生糟糕的事」 線程安全問題很是複雜,在沒有充分同步的狀況下,多個線程中的操做順序是沒法預測的。 若是沒有同步,那麼不管是編譯器、硬件仍是運行時,均可以隨意安排操做的執行順序和時間,例如對寄存器或者處理器中的變量進行緩存(緩存後成爲當前線程的局部變量),而這些被緩存的變量對於其餘線程來講是暫時(甚至永久)不可見的。
- 活躍性問題 ----> 活躍性的含義是「正確地事最終會發生」 多線程環境中活躍性問題的常見形式:死鎖、活鎖、飢餓
- 性能問題 性能問題與活躍性密切相關,活躍性意味着某件正確地事最終會發生,性能問題則關注讓其儘快發生。性能問題包含多個方面,例如服務時間過長、響應不靈敏,吞吐率太低等。
Java中使用鎖來實現同步、原子操做等功能,但鎖的使用會帶來性能方面的問題。當執行時間較長的計算或者可能沒法快速完成的操做時(例如網絡IO、控制檯IO),必定不要持有鎖。緩存