物件鎖與類鎖

2021-09-28 23:09:30 字數 1511 閱讀 3495

public

class

classlock

public

static

void

main

(string[

] args)};

for(

int i =

0; i <

3; i++)}

}輸出:

thread-0:

0thread-0:

1thread-0:

2thread-2:

3thread-2:

4thread-2:

5thread-2:

6thread-2:

7thread-2:

8...

可以看到,三個執行緒共享一把鎖,乙個時刻只有乙個執行緒允許訪問lock()方法。

給類的靜態方法加上synchronized關鍵字修飾,就相當於給該靜態方法加了一把類鎖。

類鎖是乙個全域性鎖,無論多少個物件,均共享同一把鎖。

等同於下面的方式:

synchronized

(classlock.

class

)

乙個物件持有一把鎖,不同物件之間互不影響。

當物件為單例時,物件鎖和類鎖效果一樣。

public

class

instancelock

private

static

class

mythread

extends

thread

@override

public

void

run()}

}}

public

static

void

main

(string[

] args)

}輸出:

thread-0:

0thread-1:

1thread-2:

2thread-0:

3thread-2:

4...

效果和類鎖一致,多個執行緒訪問同乙個物件同步方法時,只有乙個執行緒允許訪問,其他執行緒會被阻塞。

public

static

void

main

(string[

] args)

}輸出:

thread-2:

0thread-0:

0thread-1:

0thread-2:

1thread-0:

1thread-1:

1thread-0:

2thread-2:

2thread-1:

2...

多個例項訪問不同物件的同步方法,互不影響,可以同時進行。

物件鎖 與 類鎖

原文 一 什麼是物件鎖 物件鎖也叫方法鎖,是針對乙個物件例項的,它只在該物件的某個記憶體位置宣告乙個標識該物件是否擁有鎖,所有它只會鎖住當前的物件,而並不會對其他物件例項的鎖產生任何影響,不同物件訪問同乙個被synchronized修飾的方法的時候不會阻塞,例如 publicclassmyobjec...

synchronized物件鎖與類鎖

以前以為這兩個鎖是乙個鎖,最近測試了一下發現並不是這樣 如下 public class cusandpro public static synchronized void test2 catch interruptedexception e public static void main strin...

類鎖與物件鎖例項

public class radio catch interruptedexception e system.out.println classlock end,name public synchronized void instancelock catch interruptedexception...