描述:多個執行緒多個鎖,每個執行緒都會去拿到屬於自己的鎖,分別獲得後,執行 synchronized 修飾的方法。
1.synchronized 取得的鎖都是物件鎖,而不是把一段**、方法的鎖,多個執行緒就持有該所屬的物件鎖。2個物件,執行緒獲取的就是2個不同的鎖(相互午影響)。
2.有一種情況就是【相同的鎖】,就是在該方法 synchronized 使用static 關鍵字,表示鎖定class類,類級別的鎖(獨佔class類)。
1.demo
說明:**中通過 printnum 方法傳入引數判斷 a、b 分別對 num 這個引數的值進行了修改。
packagethread -> a overdemo1;
import
public
class mythread2 extends
thread
else
if (str.equals("b"))
system.err.println("str:" + str + "\tnum:" +num);
} catch
(interruptedexception e)
}public
static
void
main(string args)
});thread t2 = new thread(new
runnable()
});t1.start();
t2.start();
}}結果輸出:
thread -> b over
a休眠2秒後
str:b num:200
str:a num:1000
描述:synchronized 結果中並沒有發生作用,正常的結果應該是:先執行完a,在執行b。thread.sleep(1000):
讓當前執行緒掛起、停頓,交出當前執行緒占用cpu的時間(在某個時間內,把資源給別人,當前執行緒在這個時間不占用),使其他執行緒與當前的執行緒搶占cpu資源,讓2個執行緒重新分配資源,讓另乙個執行緒搶到資源並執行。
2.demo
packagethread -> a overdemo1;
import
public
class mythread2 extends
thread
else
if (str.equals("b"))
system.err.println("str:" + str + "\tnum:" +num);
} catch
(interruptedexception e)
}public
static
void
main(string args)
});thread t2 = new thread(new
runnable()
});t1.start();
t2.start();
}}結果輸出:
str:a num:1000
thread -> b over
str:b num:200
Java多執行緒 synchronized同步方法
synchronized同步方法是為了解決 非執行緒安全 的問題,所謂 非執行緒安全 是指多個執行緒對同乙個物件中的變數進行併發訪問時發生,產生 髒讀 的情況。非執行緒安全 問題存在於 例項變數 中,如果是方法內部的私有變數,則不存在 非執行緒安全 問題,也就是 執行緒安全 的了。demo hass...
執行緒synchronized 例子
public class foo public int fix int y return x public class myrunnable implements runnable catch interruptedexception e system.out.println thread.curr...
執行緒同步synchronized
synchronized只是保證在同乙個時刻,其他執行緒不能訪問鎖定的資源,但是其他方法或者是變數不能鎖定控制的 synchronized obj 上面語法格式中synchronized後括號裡的obj就是同步監視器,上面 的含義是 執行緒開始執行同步 塊之前,必須先獲得對同步監視器的鎖定。任何時刻...