【发布时间】:2011-08-13 12:10:57
【问题描述】:
如果一个同步方法调用另一个同步方法,它是线程安全的吗?
void synchronized method1() {
method2()
}
void synchronized method2() {
}
【问题讨论】:
-
这篇文章能帮你解答吗,或者你在哪里困惑? kalyanchakravarthy.net/?p=413
-
是的 - 你实际上不需要将 method2 标记为同步,假设它只在上面给出的上下文中调用。
-
另外,它是否是线程安全的将取决于这两种方法中发生的情况。例如,如果它们调用非线程安全列表,那么它们可能不是线程安全的,如果其他线程可以修改该集合。
-
作为我猜测的实际问题的答案:是的,同步关键字使用递归锁;您可以安全地从另一个同步方法调用同步方法。
-
已经有一段时间了,但它仍然是谷歌的第一个热门,所以:是的,同一个对象上的同步块/方法是可重入的。 stackoverflow.com/questions/12219376/reentrant-synchronization
标签: java thread-safety