我在eclipse和Netbeans ide中得到了不同的多线程代码输出,我不知道它是怎么来的,这背后的逻辑是什么
和每次当我执行这段代码,它会显示不同的输出,请帮助我。
公共类MyThread2扩展线程
{
public void run()
{
`System.out.println("r1");` ``
try ``
{
Thread.sleep(500);
}
catch(Exception e)
{
}
System.out.println("r2");
}
public static void main(String args[])
{
MyThread2 t1=new MyThread2();
MyThread2 t2=new MyThread2();
t1.start();
t2.start();
System.out.println(t1.isAlive());
System.out.println(t2.isAlive());
}
}
Eclipse中的输出:
r1
r1
真正的
真正的
r2
r2
和Netbeans中的输出:
r1
真正的
真正的
r1
r2
r2
线程由JVM
调度。JVM
选择运行具有最高优先级的可运行线程。无论何时创建一个新的Java线程,它都具有与创建它的线程相同的优先级。所以,在您的情况下,两个线程具有相同的优先级!因此,JVM使用自己的算法(轮循调度)来挑选线程,并按顺序选择和执行它们。它没有一个固定的顺序,它是完全不可预测的评价执行!
在相同的IDE上运行不同的示例,它会给你不同的输出。即Netbeans
或Eclipse
。你可以试着两者都跑!它可能与之前运行的顺序不一致,因为这些是由JVM调度的。
线程由JVM调度,没有特定的顺序。这就是为什么对于涉及线程的相同代码,您会看到不同的输出。
JVM使用内部操作系统底层线程管理来管理线程,在几乎所有可用的操作系统中,线程调度的算法都是轮询的。