Я знаю, що використання 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?