java synchronized(this)范围

时间:2014-01-17 21:23:16

标签: java

如果我在同一个java类的两个函数中编写synchronized(this),但这两个函数可能由两个线程调用,那么这个代码是否仍然有用?

一些假代码可能看起来像:

class A {
        public funA()
            synchronized (this) {
                // do some things here;
            }
        }

        public funB() {
            synchronized (this) {
                // do other things here;
            }
        }
}

或者我是否需要添加变量才能执行此操作?

2 个答案:

答案 0 :(得分:1)

这意味着多个线程不能'同时'输入这两个同步的块(或其中一个)。它是否有效取决于你想要达到的目的。

当前在这样的同步块中的线程在那个时刻被称为拥有对象的监视器(在这种情况下,对象的监视器指向this)。

答案 1 :(得分:1)

线程在this上同步。因此,同一个类中只有一个线程(假设没有其他方法)。您没有单独同步这些方法。所以这可能正常。虽然很难分辨,因为我不知道你想在方法中做些什么。并发总是很棘手。