Извлечение из Java-документов ,
невозможно выполнить два вызова синхронизированных методов одного и того же объекта для чередования.Когда один поток выполняет синхронизированный метод для объекта, все остальные потоки, которые вызывают синхронизированные методы для того же блока объекта (приостанавливают выполнение), пока первый поток не завершится с объектом
Итак, завершениеозначает не сам поток ( например: Consumer
не ожидает, пока Producer
не умрет или не завершится, и наоборот) , но завершит выполнение любых методов / блоков синхронизации.
Toответьте на ваш вопрос, однако Producer
и Consumer
оба могут работать с использованием Q
, но оба метода get
и put
никогда не будут выполняться одновременно из-за неявной синхронизации с экземпляром объекта с ключевым словом synchronized
,
Только один метод будет выполнен либо Producer
, либо Consumer
в любой момент времени, то есть, когда get
вызывается Consumer
, Producer
не может вызвать put
и наоборот..