synchronized 執行緒同步 類級別鎖定

2021-08-07 17:35:19 字數 1621 閱讀 9273

描述:多個執行緒多個鎖,每個執行緒都會去拿到屬於自己的鎖,分別獲得後,執行  synchronized  修飾的方法。

1.synchronized  取得的鎖都是物件鎖,而不是把一段**、方法的鎖,多個執行緒就持有該所屬的物件鎖。2個物件,執行緒獲取的就是2個不同的鎖(相互午影響)。

2.有一種情況就是【相同的鎖】,就是在該方法 synchronized 使用static 關鍵字,表示鎖定class類,類級別的鎖(獨佔class類)。

1.demo

說明:**中通過 printnum 方法傳入引數判斷 a、b 分別對 num 這個引數的值進行了修改。

package

demo1;

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 -> a over

thread -> b over

a休眠2秒後

str:b num:200

str:a num:1000

描述:synchronized  結果中並沒有發生作用,正常的結果應該是:先執行完a,在執行b。

thread.sleep(1000): 

讓當前執行緒掛起、停頓,交出當前執行緒占用cpu的時間(在某個時間內,把資源給別人,當前執行緒在這個時間不占用),使其他執行緒與當前的執行緒搶占cpu資源,讓2個執行緒重新分配資源,讓另乙個執行緒搶到資源並執行。

2.demo

package

demo1;

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 -> a over

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就是同步監視器,上面 的含義是 執行緒開始執行同步 塊之前,必須先獲得對同步監視器的鎖定。任何時刻...