【发布时间】:2020-12-11 21:58:53
【问题描述】:
我是 Java 并发的新手,我正在尝试更好地理解监视器。
假设我有一个对象,其方法采用某种引用参数并将该参数用作同步块中的监视器:
class Entity() {
public void myMethod(Object monitor) {
synchronized(monitor) {
// critical stuff
}
}
}
如果两个线程使用不同的对象作为监视器,是否可以同时进入同一实体上的该部分?
final Entity myEntity = new Entity();
for (int i = 0; i < 3; i++) {
new Thread() {
public void run() {
// Can these all run concurrently?
myEntity.myMethod(new Object());
}
}.start();
}
如果我对监视器的理解正确,那么是的,所有线程都可以同时进入同步块,因为每个监视器都充当完全不同的互斥锁,并且没有一个线程知道该块中的其他线程。
很难找到这方面的文档,因为教程大多似乎只是使用“this”作为监视器。
【问题讨论】:
标签: java multithreading concurrency parallel-processing synchronized