Здравствуйте, 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>и в этом случае дополнительный блок не нужен. Я прав или просто еще чего-то не знаю?
Два метода идентичны.