多線程編程中對于同樣的輸入民珍,結(jié)果時而正確時而錯誤的現(xiàn)象稱為競態(tài)斯辰。正確性與時間相關(guān)碑诉。
競態(tài)的兩種模式
read-modify-write
check-then-act
產(chǎn)生競態(tài)的一般條件:
設(shè)O1更啄,O2并發(fā)訪問共享變量V的兩個操作巷蚪。如果一個線程在執(zhí)行O1期間另一個線程在執(zhí)行O2,那么無論O2是在執(zhí)行讀取還是更新V都會導(dǎo)致競態(tài)啦扬。
避免競態(tài)的方法
1.盡量使用局部變量
2.使用synchronized關(guān)鍵字修飾方法中狂;在任一時刻只能被一個線程執(zhí)行
synchronized 內(nèi)部鎖僅提供非公平調(diào)度策略