Я знаю, що використання 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++;
}
}
}
Це правда, що оскільки ми визначили об'єкт, lock
який є статичним, і ми використовуємо ключове слово synchronized
для цього блокування, статична змінна count
зараз синхронізується через екземпляри класу Test
?