я просматривал исходный код для DatagramSocket
и я нашел это:В Java «синхронизирован» эквивалентно `synchronized (this)`?
public void disconnect() {
synchronized (this) {
if (isClosed())
return;
if (connectState == ST_CONNECTED) {
impl.disconnect();
}
connectedAddress = null;
connectedPort = -1;
connectState = ST_NOT_CONNECTED;
}
}
Мое понимание synchronized methods является то, что они запирают на this
. Итак, код эквивалентен следующему?
public synchronized void disconnect() {
if (isClosed())
return;
if (connectState == ST_CONNECTED) {
impl.disconnect();
}
connectedAddress = null;
connectedPort = -1;
connectState = ST_NOT_CONNECTED;
}
Есть ли причина, по которой разработчики языка решили не использовать синхронный метод здесь?
Чтобы предоставить более точный ответ на вопрос заголовка: использование спецификатора 'synchronized' для метода эквивалентно' synchronized (this) 'для всего тела метода только для * нестатических * методов. Для * статических * методов он эквивалентен 'synchronized (NameOfYourClass.class)' вокруг всего тела метода. – mastov