我正在阅读一些Android Java代码,我偶然发现了这一点:
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 :(得分:1)
在这种情况下,synchronized
表示通过某种锁定访问mObservers
的数据以确保线程安全。在当前线程以mObservers
块结束之前,其他线程无法访问synchronized
。
答案 1 :(得分:1)
如果任何其他线程在此成员函数或任何其他成员函数中遇到StringBuilder[] args = new StringBuilder[] { };
start(args);
,而特定线程在上面的synchronized块内,则该线程将暂停,直到特定线程退出块。
如果synchronized(mObservers)
只能由一个线程随时更改,并且比同步类或实例更精细的同步技术,这可能很有用。