我正在学习 Java 中的Thread
。我试图获取正在运行的线程。但是,我无法理解输出的顺序。
以下是我的代码
public class practice extends Thread {
public void run(){
for(int i=1;i<4;i++){
System.out.println(i);
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String[] args) {
practice t1=new practice();
practice t2=new practice();
practice t3=new practice();
t1.start();
t2.start();
t3.start();
}
}
输出:
1
1
1
Thread-1
2
Thread-1
3
Thread-1
Thread-0
2
Thread-0
3
Thread-0
Thread-2
2
Thread-2
3
Thread-2
任何人都可以帮助我理解输出的顺序。提前致谢。
最佳答案
线程本质上是彼此并发。这意味着,两个(或多个)线程在同时执行时会竞争相同的资源 (CPU),并且 CPU 会以随机(不可预测)的顺序从执行一个线程切换到执行另一个线程。您无法也不会知道您的 CPU 和操作系统架构将决定跳转到哪个执行路径(线程)。此外,在某些语言中,这可能是操作系统架构的问题,在某些语言中,这可能只是CPU架构的问题,而在某些语言中,这可能是两者的问题。这取决于该语言的体系结构如何管理线程。
请注意,即使两个线程是并行 - 即它们在两个不同的内核上并行执行 - 您仍然无法预测哪个内核将首先执行指令。
由于上述几点,您每次运行代码时可能会得到不同的执行顺序。
关于java - 线程是如何在内存中执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62857956/