【发布时间】:2011-05-27 09:54:42
【问题描述】:
如果我有以下代码
class SomeClass {
...
public synchronized methodA() {
....
}
public synchronized methodB(){
....
}
}
这将在“this”对象上同步。
但是,如果我在这里的主要目标是确保多个线程不会同时使用方法 A(或方法 B),但它们可以同时使用方法 A 和方法 B,
那么这种设计有限制吗?因为这里 thread1 锁定对象(与对象关联的监视对象)以运行 methodA 但同时 thread2 也在等待对象锁定,即使 methodA 和 methodB 可以同时运行。
这种理解正确吗?
如果是,这是我们在私有虚拟对象上使用同步块的情况,以便方法A和方法B可以与不同的线程并行运行,但不能与不同的线程并行运行方法A(或方法B)。
谢谢。
【问题讨论】:
-
在这里回答:*.com/questions/574240/… - 请使用搜索功能,其他问题甚至具有完全相同的名称并涵盖相同的问题。
-
我认为你是对的,但一个问题是静态方法的锁与普通对象方法的锁不同。文档非常适合这些东西:download.oracle.com/javase/tutorial/essential/concurrency/…
标签: java concurrency