多執行緒相對於單執行緒而言,大大的提高了硬體cpu的使用率,提高了處理的速度。任何事物帶來的都是兩面性的,多執行緒為我們帶來效能提高的同時也帶來了許多的安全性問題。
說互斥之前,先說一下什麼是互斥,舉個列子,一天去atm機取錢,如果沒有互斥的話,你正取著錢突然有個人衝進來把你的錢搶走了。這時候你想,要是我有個鎖我把門給鎖住,等我取完了在把鎖開啟,這樣子其他人就沒法子衝進來取我的錢了吧,簡單說,就是在幹一件事的時候,不允許任何人進來打擾我。同樣的多執行緒中也存在類似的問題,解決的辦法呢就是加上鎖。
看個**列子
public static void main(string args) catch (interruptedexception e)
for(int j=0;j沒有互斥的結果
woshiyigezhongguoren
tashilianggren
woshiyigezhongguoren
tashilianggren
tashilianggren
woshiyigezhongguoren
twoshiyigezhaosnhiglgiuaonrgegn
ren //這裡出問題了
twashilianggroesn
hiyigezhongguoren
tashilianggren
這就好比你去取錢取到一半main執行緒衝進來了,把你的錢搶走了。在jdk1.5之前是解決辦法是為這段**加上乙個鎖用法非常的簡單
synchronized(鎖物件)
使用同乙個鎖物件做鎖的**塊是安全的,你想嘛,我都鎖住了,我不放開鎖別人別想進來嘛。
public static void main(string args) catch (interruptedexception e)
synchronized (test.class) catch (interruptedexception e)
try {
lock.lock(); //獲取鎖
for(int j=0;j這樣也解決我們的問題。jdk1.8又新增了新的鎖。據說效能又有提高呢。這篇就到這裡吧。
Java多執行緒系列(二) 執行緒安全
個人主頁 tuzhenyu s page 多執行緒併發操作下可能出現記憶體不可見問題,指令重排序問題,4位元組賦值問題等,主要造成執行緒不安全的還是記憶體不可見和指令重排序 非執行緒安全出現的情況主要是多執行緒同時對乙個共享可變變數進行讀寫操作,因此可以通過以下三種方法解決非執行緒安全問題 將可變變...
java多執行緒學習(二)執行緒的基本方法
sleep long millis 作用是讓當前執行緒休眠指定的毫秒,使當前執行緒進入阻塞狀態,期間會讓出cpu的資源,但不會釋放已獲得的鎖.到達指定時間後,執行緒會從阻塞狀態變成 可執行狀態,重新競爭cpu的資源 static void sleep long millis 這是thread類中的靜...
linux c程式設計 執行緒互斥二 執行緒死鎖
死鎖就是不同的程式在執行時因為某種原因發生了阻塞,進而導致程式不能正常執行。阻塞程式的原因通常都是由於程式沒有正確使用臨界資源。我們舉個日常生活中的例子來比喻死鎖。我們把馬路上行駛的汽車比作執行著的程式,把馬路比作臨界資源,如果有兩輛汽車相互碰撞,就會把車停在馬路上,這樣的話他們一直占用著馬路這個臨...