三個(gè)問題
- 競(jìng)態(tài)條件
- 死鎖
- 內(nèi)存可見性
規(guī)則
- 訪問共享變量時(shí)需要同步
- 讀線程和寫線程都要同步化
- 持有鎖的時(shí)間應(yīng)該盡可能短
- 按照全局的固定的順序來獲得多把鎖
- 持有鎖時(shí)避免調(diào)用外星方法
java中的一些問題
- 編譯器的靜態(tài)優(yōu)化可以打亂代碼的執(zhí)行順序
- JVM的動(dòng)態(tài)優(yōu)化也會(huì)打亂代碼的執(zhí)行順序
- 硬件可以通過亂序執(zhí)行來優(yōu)化其性能
線程
- 有時(shí)候一個(gè)線程的修改 可能對(duì)另一個(gè)線程不可見
java內(nèi)存模型
- 如果讀線程和寫線程不進(jìn)行同步,就不能保證可見性
- 同步方法
- 獲取對(duì)象內(nèi)置鎖
- 開啟一個(gè)線程并且通過join()檢查線程是否已經(jīng)終止睦焕。
- 使用java.util.concurrent包提供的工具