public class Threads1 {
int x = 0;
public class Runner implements Runnable {
public void run(){
int current = 0;
for(int i = 0; i<4; i++){
current = x;
System.out.println(current + ", ");
x = current + 2;
}
}
}
public static void main(String[] args) {
new Threads1().go();
}
public void go(){
Runnable r1 = new Runner();
new Thread(r1).start();
new Thread(r1).start();
}
}
我想找到这段代码的执行步骤,有没有办法可以向我展示我的consol中的执行流程?
答案 0 :(得分:1)
将System.out.println()
语句放在代码中的适当位置。例如,放
System.out.println("Entering a for loop");
在for循环之前知道何时输入for循环。
了解如何在IDE中设置断点。在您不理解的代码部分的开头设置断点。当要执行该行时,程序将暂停并允许您检查变量,堆栈跟踪,线程等中的值。您还可以找出调试器中正在运行的当前行的哪个线程。 / p>
此外,在调试器上找到“Step in”,“Step over”和“Step out”按钮。这些将允许您逐行“逐步”执行代码,以便您可以查看执行所需的路径。
答案 1 :(得分:0)
Java主题
如果你有几个线程同时运行,那么无法预测哪一个线程首先完成或什么时候完成,比如差分编程。不同的线程由CPU的不同内核执行,因此完全独立于另一个,这会影响计算速度和顺序(CPU中的分支预测在这里扮演一个角色)。这可能导致相当困难的错误,因为它们有时只会发生。
您的问题
线程的执行顺序并不能确定在运行时由CPU决定的编译时间不一致,因为线程不知道他们有合作伙伴。
<强>解决方案强>
要显示它发生的顺序,只需在您的方法中插入System.out.println
语句,并创建一个记录控制台中发生的事情的日志。
已同步的已控制线程
如果使用线程,Java支持synchronized
关键字。 Synchronized允许您对多个线程进行一些控制。例如,一次只有一个线程可以与变量或方法交互。有关更多信息,只需谷歌Java同步线程。