原子性:
原子性是指乙個操作是不可中斷的。即使是在多個執行緒一起執行的時候,乙個操作一旦開始,就 不會被其它執行緒干擾。 i++ 不是原子操作
有序性一條指令的執行是可以分為很多步驟的
– 取指if
– 解碼和取暫存器運算元 id
– 執行或者有效位址計算 ex
– 儲存器訪問 mem
– 寫回wb
可見性可見性是指當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改。
– 編譯器優化
– 硬體優化(如寫吸收,批操作)
1、程式順序原則:乙個執行緒內保證語義的序列性
2、volatile規則:volatile變數的寫,先發生於讀,這保證了volatile變數的可見性
3、鎖規則:解鎖(unlock)必然發生在隨後的加鎖(lock)前
4、傳遞性:a先於b,b先於c,那麼a必然先於c
5、執行緒的start()方法先於它的每乙個動作
6、執行緒的所有操作先於執行緒的終結(thread.join())
7、執行緒的中斷(interrupt())先於被中斷執行緒的**
8、物件的建構函式執行結束先於finalize()方法
執行緒安全的概念
指某個函式、函式庫在多執行緒環境中被呼叫時,能夠正確地處理各個執行緒的區域性變數,使程式功 能正確完成
public class accountingsync implements runnable {
static accountingsync instance = new accountingsync();
static int i = 0;
@override
public void run() {
for (int j = 0; j < 10000000; j++) {
synchronized (instance) {
i++;
Java執行緒安全和非執行緒安全
arraylist是非執行緒安全的,vector是執行緒安全的 hashmap是非執行緒安全的,hashtable是執行緒安全的 stringbuilder是非執行緒安全的,stringbuffer是執行緒安全的 什麼是執行緒安全?執行緒安全和非執行緒安全有什麼區別?分別在什麼情況下使用?非執行緒安...
java記憶體模型
一 原子性 原子性是指乙個操作是不可中斷的,即使是多個執行緒一起執行的時候,乙個操作的開始,就不會被其他執行緒干擾 那麼有人會想到 i 是原子操作嗎?答案肯定不是。因為i 至少包含兩個操作,讀 從記憶體中讀出來 和行為 加上去 還有可能把加完後的資料在方法到i裡面去,出來也是1,這兩個執行緒同時進行...
Java記憶體模型
1.首先,執行緒a把本地記憶體a中更新過的共享變數重新整理到主記憶體中去。2.然後,執行緒b到主記憶體中去讀取執行緒a之前已更新過的共享變數。1.共享物件對各個執行緒的可見性 2.共享物件的競爭現象 指令級並行的重排序 如果不存l在資料依賴性,處理器可以改變語句對應機器指令的執行順序。記憶體系統的重...