Объясните мне, в чем разница между синхронизацией по методу и по объекту. Для вашего правильного понимания того, как я реально это понимаю, привожу свое объяснение синхронизации по методу:
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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Почему не отрабатывает программа? То есть почему только Arith в консоли я вижу? Потому что "выбран" method1? Чтобы такой код отработал каждый метод...
Нашел пример в интернете как работать с бд решил реализовать под свою задачуСоздал класс DBHelper:
Решил изучить эту ORM потому что на примерах она показалось мне легкимТак вот есть простой объект:
Есть DialogFragment который должен запускаться при открытии Activity, но возникла проблема, видно тормоза, думаю из-за того что DialogFragment грузиться вместе...