並發編程三要素(線程的安全性問題體現在):
原子性:原子,即壹個不可再被分割的顆粒。原子性指的是壹個或多個操作要麽 全部執行成功要麽全部執行失敗。
可見性:壹個線程對***享變量的修改,另壹個線程能夠立刻看到。 (synchronized,volatile)
有序性:程序執行的順序按照代碼的先後順序執行。(處理器可能會對指令進行 重排序)
出現線程安全問題的原因:
線程切換帶來的原子性問題
緩存導致的可見性問題
編譯優化帶來的有序性問題
解決辦法:
JDK Atomic開頭的原子類、synchronized、LOCK,可以解決原子性問題
synchronized、volatile、LOCK,可以解決可見性問題
Happens-Before 規則可以解決有序性問題