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...