У меня есть 2 синхронизированных метода в классе say method1() и method2(). Нить говорит, что «Thread 1» удерживает блокировку этого объекта класса, выполняя синхронизированный метод1(). Может ли другой поток сказать «Thread 2», получить доступ к блокировке через метод2() одновременно, пока «Thread 1» удерживает замок.два разных синхронизированных метода одного и того же объекта?
Этот случай является аналогом класса java.util.Vector с синхронизированными методами add() и remove(). Просьба пояснить этот случай.
Благодаря Borealid .. Но если это так, почему Java обеспечивает синхронизацию, специфичные для методов, она может только при условии, для весь класс? – JavaUser
@JavaUser: 'synchronized (this)' не означает, что весь класс «синхронизирован». Это означает, что вы приобрели блокировку объекта экземпляра, на который был вызван метод. Вы не обязательно хотите, чтобы * все * методов были «синхронизированы» (на самом деле, вы редко когда-либо будете). Чтобы получить производительность многопоточного кода, вы должны использовать как можно меньше блокировок при сохранении правильности программы - каждый раз, когда у вас есть фиксированная блокировка, какой-то поток будет ждать, ничего не делая. – Borealid
@ Borealid .. момент, который я определил, синхронизированный в любом методе, весь объект заблокирован, когда я вызываю этот метод .. я прав? – JavaUser