Re: synchronized в synchronized методе
От: Fuud  
Дата: 23.01.11 17:40
Оценка: 2 (1)
Здравствуйте, Cadet, Вы писали:

C>Доброго времени суток, коллеги.


C>Осваиваю андроид, ну и параллельно с этим сам язык java — он для меня в новинку. Копаясь в примерах, несколько раз натыкался на конструкцию:

C>
C>public synchronized void restoreState(Bundle savedState) {
C>    synchronized (mSurfaceHolder) {
C>    // ...
C>    }
C>}
C>

C>mSurfaceHolder — приватная экземплярная (нестатическая) переменная.

Таким образом можно делать группы синхронизаций. Как-нибудь так:

public synchronized void method1(***) {
    synchronized (mSurfaceHolder) {
    }
}

public synchronized void method2(***) {
}

public void method3(***) {
    synchronized (mSurfaceHolder) {
    }
}


method1 не может выполняться одновременно с двумя другими, а второй и третий одновременно могут.

C>Какой смысл во внутреннем блоке synchronized? Если я верно понял документацию по java, то все вызовы synchronized методов защищены от одновременного вхождения для каждого объекта, т.е. следующие 2 метода по в моем понимании эквивалентны

C>
C>public synchronized void method1() {
C>}

C>public void method2() {
C>    synchronized (this) {
C>    }
C>}
C>

C>и в этом случае дополнительный блок не нужен. Я прав или просто еще чего-то не знаю?

Два метода идентичны.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.