線程安全性
- 一個對象是否需要時線程安全的,取決于它是否被多個線程訪問。要使得對象是線程安全的們需要采用同步機制來協(xié)同對對象可變狀態(tài)的訪問。
- 當多個線程同時對一個狀態(tài)變量進行寫操作時,必須采用同步機制來協(xié)同這些線程對變量的訪問,Java中使用關(guān)鍵字synchronized,否則程序會在未來某一時刻發(fā)生錯誤。
- 多線程會共享資源,因此當多個線程同時爭搶一個資源時,如果不進行同步處理就會產(chǎn)生沖突,即是線程不安全的,而對于無狀態(tài)的對象也一定是線程安全的。- 一種常見的錯誤想法是,只有在寫入共享變量時才需要使用同步,然而事實并非如此。
原子性
具有原子性的操作被稱為原子操作。原子操作在操作完畢之前不會線程調(diào)度器中斷,即不可分割。
- 理解事務(wù)——原子性、一致性、隔離性和持久性
- Java并發(fā)總結(jié)(二):同步與原子性
- java.util.concurrent.atomic包下包含了一些原子操作的類,其基本的特性就是在多線程環(huán)境下,當有多個線程同時執(zhí)行這些類的實例包含的方法時,具有排他性,即當某個線程進入方法,執(zhí)行其中的指令時,不會被其他線程打斷,而別的線程就像自旋鎖一樣,一直等到該方法執(zhí)行完成,才由JVM從等待隊列中選擇一個另一個線程進入,這只是一種邏輯上的理解。詳情見:java.util.concurrent.atomic原子操作類包