2016-06-09 1 views
0

Я читаю через некоторые из кода Android Java, и я наткнулся на это:Что в данном случае означает использование synchronized()?

public void registerObserver(T observer) { 
    if (observer == null) { 
     throw new IllegalArgumentException("The observer is null."); 
    } 
    synchronized(mObservers) { 
     if (mObservers.contains(observer)) { 
      throw new IllegalStateException("Observer " + observer + " is already registered."); 
     } 
     mObservers.add(observer); 
    } 
} 

Я только видел synchronized используется в качестве ключевого слова перед переменной или класса. Что он делает в этом случае?

+0

В андроид-студии держите 'CTRL' и щелкните имя метода, и оно отобразит список обычаев/декларации. – SQLiteNoob

+3

http://tutorials.jenkov.com/java-concurrency/synchronized.html#synchronized-blocks-instance-methods – CommonsWare

ответ

1

В этом случае synchronized означает доступ к данным mObservers с каким-то запиранием для обеспечения безопасности потоков. Другие потоки не могут получить доступ к mObservers, пока текущий поток не завершит работу с блоком synchronized.

Оформить заявку this documentation.

1

Если какой-либо другой поток встречает synchronized(mObservers) в этой функции-члене или какой-либо другой функции-члена, в то время как конкретный поток находится внутри синхронизированного блока выше, то этот поток будет остановлен до тех пор, пока конкретный поток не выйдет из блока.

Это может быть полезно, если mObservers может быть изменен только одним потоком в любое время и является более тонкой технологией синхронизации, чем синхронизация на классе или экземпляре.

 Смежные вопросы

  • Нет связанных вопросов^_^