Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

понедельник, 11 октября 2010 г.

Разница в synchronized(this) и synchronized(SomeClass.class)

Рассмотрим, в чем разница между
synchronized(this) {
//some stuff
}
и
synchronized(SomeClass.class) {
//some stuff
}

В Java каждый объект имеет ассоциированный с ним монитор (или lock - объект блокировки). Когда мы пишем такой код:
synchronized(this) {
//some stuff
}

мы получаем блокировку, ассоциированную с объектом, на который указывает this. Когда мы используем такую блокировку, мы подразумеваем, что мы готовы ждать, пока поток, использующий этот монитор, не освободит его. Такую блокировку имеет смысл использовать, если изменяем данные объекта (переменные объекта).

Когда мы пишем такой код:
synchronized(SomeClass.class) {
//some stuff
}
мы получаем блокировку, ассоциированную с объектом SomeClass.class. Такую блокировку имеет смысл использовать, если мы изменяем данные (переменные) уровня класса, т.е. статические переменные.

Комментариев нет:

Отправить комментарий

Постоянные читатели