在这种情况下,synchronized()的用途是什么意思?

时间:2016-06-09 18:35:48

标签: java synchronization

我正在阅读一些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用作关键字。在这种情况下它做了什么?

2 个答案:

答案 0 :(得分:1)

在这种情况下,synchronized表示通过某种锁定访问mObservers的数据以确保线程安全。在当前线程以mObservers块结束之前,其他线程无法访问synchronized

查看this documentation

答案 1 :(得分:1)

如果任何其他线程在此成员函数或任何其他成员函数中遇到StringBuilder[] args = new StringBuilder[] { }; start(args); ,而特定线程在上面的synchronized块内,则该线程将暂停,直到特定线程退出块。

如果synchronized(mObservers)只能由一个线程随时更改,并且比同步类或实例更精细的同步技术,这可能很有用。