У меня есть 2 синхронизированных метода в классе, говорят что method1 () и method2 (). Поток говорит, что "Поток 1" содержит блокировку на том объекте класса путем выполнения синхронизируемого method1 ().Can, другой поток говорят "Поток 2", получают доступ к блокировке через method2 () одновременно в то время как "Поток 1" содержание блокировка.
Этот случай является аналогами к java.util. Векторный класс, синхронизировавшийся, добавляет () и удаляет () методы. Объясните этот случай также.
Нет. синхронизированный
метод в Java идентичен тому, что весь метод имеет тело, обернутое в синхронизированный (this)
блок. Поэтому если один поток находится в синхронизированном
методе, другой поток не может одновременно находиться в другом синхронизированном
методе на том же объекте.
Это относится к вектору
: вы не хотите, чтобы один код пытался удалить элемент, в то время как другой код пытается добавить элемент. Это концепция критической секции; вы не только не хотите, чтобы кто-то другой пытался сделать то, что делаете вы, вы также не хотите, чтобы кто-то другой делал что-то другое, что могло бы помешать.
Thread2 может получить доступ к блокировке, но не может войти в блок, охраняемый этой блокировкой, пока Thread1 удерживает ту же блокировку.
Нет, только один поток может удерживать блокировку одновременно
http://download.oracle.com/docs /cd/E17409_01/javase/tutorial/essential/concurrency/syncmeth.html