Объясните мне, в чем разница между синхронизацией по методу и по объекту. Для вашего правильного понимания того, как я реально это понимаю, привожу свое объяснение синхронизации по методу:
public synchronized void inty(){
i++;
}
В данном случае потоки выстраиваются в очередь перед методом, так как он промаркирован ключевым словом synchronized. То есть в данном случае, слово synchronized обозначает некую защелку, которую закрывает и открывает каждый входящий поток.
Но как понять запись типа
public void inty(){
synchronized (object){
i++;
}
}
Я не могу понять логику и не могу даже объяснить, как в данном случае работает код. Объясните на пальцах без применения высокоразвитых терминов. Спасибо
"Синхронизация по объекту" означает, что к объекту, являющемуся разделяемым ресурсом (второй случай), будет иметь доступ только один поток одновременно.
У каждого объекта в Java существует атрибут, обеспечивающий контроль за доступом к данному объекту. Он называется монитор (он же мьютекс). Работает он так: если поток1 использует ресурс (объект) и захватил его монитор (с помощью synchronized), то поток2, желающий использовать тот же ресурс (объект), должен подождать освобождения монитора, захватить его и только потом начать использовать ресурс.
https://github.com/enhorse/java-interview/blob/master/concurrency.md
Продвижение своими сайтами как стратегия роста и независимости