1.執行緒安全的概念
當多個執行緒訪問某乙個類(物件或方法)時,這個類始終都能表現出正確的行為,那麼這個類(物件或方法)就是執行緒安全的.
synchronized:可以在任意物件或方法上加鎖,而加鎖的這段**稱為"互斥區"或"臨界區"
#**示例:
package com.thread.safety;
/** * 執行緒安全小例子:多個執行緒競爭問題
* @author lhy
* @time 2017.12.22
* */
public class mythread extends thread
/*** 執行機制分析:當多個執行緒訪問mythread的run方法時,以排隊的方式進行處理(這裡排隊是按照cpu分配的先後順序而定的)
* 乙個執行緒想要執行synchronized修飾的方法裡的**:
* 1.嘗試獲得鎖
* 2.如果拿到鎖,執行synchronized**體內容;拿不到鎖,這個執行緒就會不斷地嘗試獲得這把鎖,直至拿到為止
* 而且是多個執行緒同時去競爭這把鎖(也就是會產生鎖競爭的問題)
* @param args
*/public static void main(string args)
}
#**分析:
當多個執行緒訪問mythread的run方法時,以排隊的方式進行處理(這裡排隊是按照cpu分配的先後順序而定的) ,乙個執行緒想要執行synchronized修飾的方法裡的**,首先是嘗試獲得鎖,如果拿到鎖,執行synchronized**體內容;拿不到鎖,這個執行緒就會不斷地嘗試獲得這把鎖,直至拿到為止,而且是多個執行緒同時去競爭這把鎖(也就是會產生鎖競爭的問題)
2.多個執行緒多個鎖問題
概念:多個執行緒,每個執行緒都可以拿到自己指定的鎖,分別獲得鎖之後,執行synchronized方法體的內容
#**示例
package com.thread.safety;
/** * 多個執行緒多個鎖問題
* * @author lhy
* @time 2017.12.22
* */
public class multithread else
system.out.println("tag" + tag + ", num = " + num);
} catch (interruptedexception e) }
//注意觀察run方法輸出順序
public static void main(string args)
});thread t2 = new thread(new runnable()
});t1.start();
t2.start();
}}
#**分析:
關鍵字synchronized取得的鎖都是物件鎖,而不是把一段**(方法)當做鎖,所以示例**中哪個執行緒先執行synchronized關鍵字的方法,哪個執行緒就持有該方法所屬物件的的鎖(lock).兩個物件,執行緒獲得的就是兩個不同的鎖,他們互不影響.
有一種情況則是相同的鎖:即在靜態方法上加synchronized關鍵字,表示鎖定.class類,類一級別的鎖(獨佔.class類)
Java併發程式設計 單例模式執行緒安全問題
單例模式是指對乙個物件進行一次例項化,然後全域性都可以呼叫該例項化物件來完成專案的開發。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以...
高併發執行緒安全問題
高併發執行緒 1 當多個執行緒訪問同乙個共享物件時,就是高併發執行緒。如,天貓雙十一等。因為執行緒的排程是搶占式的,當乙個執行緒在訪問共享資料 可以是多行 也可以是成員變數 時,其他執行緒也參與了該共享資料的運算,就會造成資料汙染,即執行緒安全 a 可見性 當多條執行緒在運算同一共享資料時,某條執行...
併發程式設計專題(一) 執行緒安全問題
當多個執行緒同時共享,同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。案例 需求現在有100張火車票,有兩個視窗同時搶火車票,請使用多執行緒模擬搶票效果。public class threadtrain implements...