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