如果我在同一个java类的两个函数中编写synchronized(this)
,但这两个函数可能由两个线程调用,那么这个代码是否仍然有用?
一些假代码可能看起来像:
class A {
public funA()
synchronized (this) {
// do some things here;
}
}
public funB() {
synchronized (this) {
// do other things here;
}
}
}
或者我是否需要添加变量才能执行此操作?
答案 0 :(得分:1)
这意味着多个线程不能在'同时'输入这两个同步的块(或其中一个)。它是否有效取决于你想要达到的目的。
当前在这样的同步块中的线程在那个时刻被称为拥有对象的监视器(在这种情况下,对象的监视器指向this
)。
答案 1 :(得分:1)
线程在this
上同步。因此,同一个类中只有一个线程(假设没有其他方法)。您没有单独同步这些方法。所以这可能正常。虽然很难分辨,因为我不知道你想在方法中做些什么。并发总是很棘手。