【发布时间】:2018-10-18 09:51:13
【问题描述】:
假设您有以下课程:
public class A {
public void run() {
synchronized(B.class) {
System.out.println("A: here");
}
}
}
public class B {
public void run() {
synchronized(B.class) {
System.out.println("B: here");
}
}
}
因此,如果 obj a 和 obj b 在同一个 jvm 上运行,则同步块内的代码将被同步。
我想测试同步,所以我有一个用于 A 类和 B 类的 JUnit 测试用例。
我通过 Eclipse 菜单 DebugAs->JUnitTest 在 eclipse 上运行这两个测试用例。
结果是,没有同步。这是因为 Eclipse 会为每个启动的 JUnit 测试用例创建一个新的 JVM 吗?
如果是,有没有办法测试同步?
谢谢你
【问题讨论】:
-
“结果是,没有同步”到底是什么意思?如果输出包含
A: here和B: here以外的行,则混合发生在同步块之后。 (在您的示例中,synchronized(B.class)仅保证一个或没有线程同时执行两个块的代码。) Run/Debug As JUnit Test 启动一个新的 JVM(请参阅启动配置 JRE 选项卡)。 -
我在 System.out.println("B: here"); 处有一个断点在 System.out.println("A: here");当我运行两个测试用例时,我可以到达两个断点。
-
您是通过包含两个测试用例(-> 一个 JVM)的测试套件运行这两个测试用例,还是分别运行两个测试用例(-> 两个 JVM)?
-
两个测试用例分开。谢谢你的提示。我找到了解决办法
标签: java eclipse debugging junit synchronization