【发布时间】:2015-02-22 15:05:46
【问题描述】:
假设我有以下代码:
synchronize (Test.class) {
...
}
- 这是否意味着
Test.class对象每次都被锁定 其他程序在同一虚拟机中运行?或者这样做 lock 只影响 JVM 中的这一个程序? - 如果它影响每个程序:当
Test.class处于两个程序通过不同但内容相同的 JAR 包含的依赖项中时,锁定是否仍会影响两个程序?
【问题讨论】:
-
嗯,JVM 是一个进程,那么您的第一个问题是什么意思?
-
@fge 我想这个问题可能适用于多个网络应用程序。
-
@fge 我猜你是对的,我没想到这个。
-
@BoristheSpider.. 我不明白你的意思。每个 Web 应用程序在容器(比如 tomcat)中都有一个不同的类加载器,所以即使
Test.class在共享库中,当它实际加载时,它们都会创建一个该类加载器唯一的Test.class实例,并且用作锁。我在这里错过了什么吗? -
@AniketThakur 它是,例如 - here's the Tomcat documentation.
标签: java class jvm synchronization locking