Как синхронизировать статическую переменную между потоками, выполняющими разные экземпляры класса в Java?
Я знаю, что с помощьюsynchronize
Ключевое слово перед методом приносит синхронизацию этому объекту. То есть 2 потока, выполняющие один и тот же экземпляр объекта, будут синхронизированы.
Однако, поскольку синхронизация находится на уровне объекта, 2 потока, выполняющие разные экземпляры объекта, не будут синхронизированы. Если у нас есть статическая переменная в классе Java, которая вызывается методом, мы хотели бы, чтобы она синхронизировалась между экземплярами класса. Два экземпляра работают в 2 разных потоках.
Можем ли мы добиться синхронизации следующим образом?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
Правда ли, что, поскольку мы определили объектlock
это статично, и мы используем ключевое словоsynchronized
для этого замка, статическая переменнаяcount
теперь синхронизируется между экземплярами классаTest
?