[英]Simple Threads Behaviour in Java
/* Multiple Threads Executing
* Author Myth17
*/
class T1 implements Runnable
{
public void run()
{
for(int c=0;c<10;c++)
System.out.println(Thread.currentThread().getName()+" running....");
}
}
class T2 implements Runnable
{
public void run()
{
for(int c=0;c<10;c++)
System.out.println(Thread.currentThread().getName()+" running....");
}
}
class T3 implements Runnable
{
public void run()
{
for(int c=0;c<10;c++)
System.out.println(Thread.currentThread().getName()+" running....");
}
}
class Rt
{
public static void main(String args[])
{
T1 j1=new T1();
T2 j2=new T2();
T3 j3=new T3();
Thread w1=new Thread(j1);
w1.setName("S");
Thread w2=new Thread(j2);
w2.setName("N");
Thread w3=new Thread(j3);
w3.setName("M");
w1.start();
w2.start();
w3.start();
}
}
如果循环在三个for循环中最多运行3个,则在Linux Java JVM中,每个线程以SSSNNNMMM(9行)的顺序执行。
我将循环更改为每个for循环最多可以运行10个循环。 我原本希望30行,然后更改顺序。 但是奇怪的是,S从不执行,程序退出!!
S不该早晚获得机会吗? 据我了解,除了守护进程线程外,JVM仅在用户线程完成后才关闭。
您是否意识到输出文件夹中有8行N和10行M。 似乎输出窗口仅显示18行。 S运行,但是您看不到它。
你可以尝试增加环路的20,而不是10。我想你只会看到18行M的 。
(似乎问题在于输出窗口上没有滚动条。如果存在调整大小,则应该可以使用。)
在您的代码段中,两个线程都不是守护程序。 在通过Thread#setDaemon()将线程设置为守护程序之前,所有线程将在应用程序退出之前完全执行。
重新检查你的问题!
这应该起作用了。 您可以将日志放入run()
方法或使用断点对其进行调试。
窗口中仅显示18行。
所有“ S”行以及其中两个“ N”行均已滚动。
我尝试在Windows Sun JVM 1.6上运行您的代码,并且按预期,我得到了30行。 您正在使用哪种JVM? 所有非守护程序线程都应在JVM存在之前完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.