Если у вас есть класс, который выглядит так,
class C {
public synchronized void method1() { ... }
public synchronized void method2() { ... }
}
Вы не может иметь любые две нити, работающие method1
или method2
, или любую комбинацию из двух одновременно.
При использовании синхронизированных методов вы заявляете, что не более одного В потоке может быть запущен один из синхронизированных методов в любой момент времени.
Если есть методы, которые вы хотели бы запускать одновременно, вам, вероятно, потребуется изучить управление несколькими блокировками (синхронизированные блоки, а не методы, используя какой-либо монитор, отличный от this
).
Может быть, вам следует использовать this lesson.
Во-первых, невозможно, чтобы два вызова синхронизированных методов на одном объекте чередовали. Когда один поток выполняет синхронизированный метод для объекта, все другие потоки, которые вызывают синхронизированные методы для одного и того же блока объектов (приостанавливают выполнение) до тех пор, пока первый поток не будет выполнен с объектом.
Если подключенный объект/тело введен потоком, он заблокирован для других потоков. Когда первый поток заканчивается, он разблокируется и один из других может войти. –