public synchronized int getCountOne() {
return count++;
}
Podobnie jak w powyższym kodzie synchronizacja w metodzie jest funkcjonalnie równoważna posiadaniu synchronized (this) block
wokół całego ciała metody. Obiekt "this" nie zostaje zablokowany, a obiekt "this" jest używany jako mutex
, a ciało nie może wykonywać jednocześnie z innymi sekcjami kodu również zsynchronizowanymi w "tym".W jaki sposób pozyskano blokadę poziomu klasowego?
Z podobnych powodów, co jest wykorzystywane jako mutex
kiedy nabyć lock.As poziomie klasy, jeśli mamy funkcję
public static synchronized int getCountTwo() {
return count++;
}
oczywiście dwa wątki mogą jednocześnie uzyskać zamki getCountOne (blokada poziom obiektu) i getCountTwo (blokada na poziomie klasy). Więc jak getCountOne jest analogiczny do
public int getCountOne() {
synchronized(this) {
return count++;
}
}
czy istnieje odpowiednik getCountTwo? Jeśli nie ma jakich kryteriów używa się do uzyskania blokady na poziomie klasy?
Dzięki za miłe wyjaśnienie – Prabhaker