Я знаю, что static
synchronized
метод заблокирован на class
объекта, и в то время как экземпляр synchronized
метода замков на текущий экземпляр объекта т.е. this
.ресурсов распределяются между статическими и не-статические методы в Java
Поскольку оба эти объекта отличаются друг от друга, они имеют разную блокировку, так что при выполнении одного потока static
synchronized
метод, другой поток в java не должен ждать возвращения этого потока, вместо этого он получит отдельную блокировку.
Рассмотрим следующий пример
public class Test {
static int count = 0;
public synchronized void f1(){
count++;
}
public static synchronized void f2(){
count++;
}
}
здесь общий счетчик не доступ во взаимной исключительной моды, которые могут привести к неправильной прохождения count
к вызывающему f1()
в то время как другой поток приращением count
с использованием static
f2()
метода.
Что такое решение в этой ситуации? Я задаю правильный вопрос, если нет, пожалуйста, сделайте меня правильным? И если это правда, то какое решение делает java pr ovoids?