два различных синхронизированных метода того же объекта?

У меня есть 2 синхронизированных метода в классе, говорят что method1 () и method2 (). Поток говорит, что "Поток 1" содержит блокировку на том объекте класса путем выполнения синхронизируемого method1 ().Can, другой поток говорят "Поток 2", получают доступ к блокировке через method2 () одновременно в то время как "Поток 1" содержание блокировка.

Этот случай является аналогами к java.util. Векторный класс, синхронизировавшийся, добавляет () и удаляет () методы. Объясните этот случай также.

9
задан JavaUser 12 July 2010 в 07:30
поделиться

3 ответа

Нет. синхронизированный метод в Java идентичен тому, что весь метод имеет тело, обернутое в синхронизированный (this) блок. Поэтому если один поток находится в синхронизированном методе, другой поток не может одновременно находиться в другом синхронизированном методе на том же объекте.

Это относится к вектору: вы не хотите, чтобы один код пытался удалить элемент, в то время как другой код пытается добавить элемент. Это концепция критической секции; вы не только не хотите, чтобы кто-то другой пытался сделать то, что делаете вы, вы также не хотите, чтобы кто-то другой делал что-то другое, что могло бы помешать.

10
ответ дан 4 December 2019 в 15:11
поделиться

Thread2 может получить доступ к блокировке, но не может войти в блок, охраняемый этой блокировкой, пока Thread1 удерживает ту же блокировку.

3
ответ дан 4 December 2019 в 15:11
поделиться

Нет, только один поток может удерживать блокировку одновременно

http://download.oracle.com/docs /cd/E17409_01/javase/tutorial/essential/concurrency/syncmeth.html

0
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: