3 использования синхронизированного ключевого слова.
Точно:
final Object object = new Object();
synchronized(object) {
}
Метод синхронизации экземпляра
synchronized void foo() {
}
будет использовать текущий экземпляр какблокировка монитора, которая равна:
void foo() {
synchronized (this) {
}
}
Поэтому, когда вы вызываете foo
в разных случаях, они не будут влиять друг на друга.
Класс синхронизированного метода
class Exmaple {
static synchronized void foo() {
}
}
будет использовать текущий объект класса в качестве блокировки монитора, что равно:
class Exmaple {
static void foo() {
synchronized (Exmaple.class) {
}
}
}