powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Threads и locking при synchronized
4 сообщений из 4, страница 1 из 1
Threads и locking при synchronized
    #33698647
Андромедо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой вопрос.

Есть простенький код:

Код: plaintext
1.
2.
3.
4.
5.
...
 public   synchronized   void  doSomething() {
   ...
}
...

Это аналогично такому:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
 public   void  doSomething() {
    synchronized ( this ) {
      ...
   }
}
...

Мне непонятно. Во втором случае явно лочим объект. А не класс. В первом случае исходя из Сановской доки:

http://java.sun.com/docs/books/tutorial/essential/threads/monitors.html
A critical section can be a block or a method and is identified with the synchronized keyword. The Java platform associates a lock with every object and the lock is acquired when a critical section is entered.

Лочатся все объекты этого класса.


Что же происходит в случае synchronized (ClassName.class) ?
Я знаю что так надо делать в случае когда надо залочить (сайнхронайзить) доступ к статикам в классе.
Таки тут все не очень однозначно для меня.

Кто подскажет?
...
Рейтинг: 0 / 0
Threads и locking при synchronized
    #33698738
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
все просто, если вы испльзуете синхорнизацию для class members, то thread приобретает lock класса, если вы используете синхронизацию instance member то thread приобретает lock экземпляра класса.
В преведенных вами премерах разница будет в том что в первом случае thread приобретет lock обьекта сразу при вызове метода. Во втором случае немного сложнее. Здесь любой thread сможет вызвать метод (поскольку на данном этапе не один из threads не владеет lock обьекта), но как только какой нибудь thread войдет в critical section он приобретет лок обьекта. Данный вариант дает вам больше гибкости поскольку позволяет помешать внутрь critical section только необходимые операции а не весь метод.
...
Рейтинг: 0 / 0
Threads и locking при synchronized
    #33698739
Андромедо http://java.sun.com/docs/books/tutorial/essential/threads/monitors.html
A critical section can be a block or a method and is identified with the synchronized keyword. The Java platform associates a lock with every object and the lock is acquired when a critical section is entered.

Лочатся все объекты этого класса.

Я так понимаю, это трудности перевода.

"The Java platform associates a lock with every object". Здесь говорится не о том, что при входе в критическую секцию лочатся все объекты данного класса, а о том, что у каждого объекта есть своя собственная блокировка (то, что обычно в документации зовется монитором). Короче, с каждым объект асоциируется свой монитор.

"the lock is acquired when a critical section is entered". А это о том, что при входе в критическую секцию, блокировка устанавливается на мониторе того объекта, с которым ассоциирована критическая секция. При этом лочится только один объект.

Андромедо
Что же происходит в случае synchronized (ClassName.class) ?

ClassName.class - это тоже объект (типа Class). А раз так, то у него тоже есть монитор, на котором можно установить блокировку; при этом ни один экземпляр типа ClassName не блокируется.

Андромедо
Я знаю что так надо делать в случае когда надо залочить (сайнхронайзить) доступ к статикам в классе.
Вообще, суть блокировки в том, что в каждый момент времени монитором объекта может владеть только один поток (или ни одного). Когда речь идет о статических методах, самым подходящим оказывается объект ClassName.class. Но в принципе, это может быть любой другой объект. Например, где-то в моем коде была специальная переменная для каких-то специфических блокировок (уже не помню, что именно):
Код: plaintext
1.
 final  Object specialLock =  new  Object();
...
Рейтинг: 0 / 0
Threads и locking при synchronized
    #33699114
s-e-r-g-e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для нормальных методов лочатся инстансы класса, для статик методов лочится соотвествующий объект класс, а из той цитаты то что выведено по моему не следует :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Threads и locking при synchronized
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]