在 intellij 中调试多线程代码时,更具体地说,在单步执行线程时...
设置:
@Override
public
void run() {
while (true) {
System.err.println("1" + get()); <-- breakpoint
System.err.println("2" + get());
System.err.println("3" + get());
}
}
public String get() {
return "x";
}
Run Code Online (Sandbox Code Playgroud)
我有 6 个线程,都在运行上面的代码。
Intellij 不断更改我所在的当前线程,这意味着当我为 T1 发出“Step over”(F8)命令时,调试器会将焦点更改为 T2。我很期待是留在T1 ,而我调试-这样产生的结果:
T1: 1x
T1: 2x
T1: 3x
T1: 1x
T1: 2x
Run Code Online (Sandbox Code Playgroud)
然后,让我们切换到另一个线程,T2。
T2: 1x
T2: 2x
T2: 3x
T2: 1x
T2: 2x
T2: 3x
Run Code Online (Sandbox Code Playgroud)
然后,回到T1:
T1: 3x (it picks back up from where it left off)
Run Code Online (Sandbox Code Playgroud)
相反,我得到的是:
T1: …Run Code Online (Sandbox Code Playgroud)