如我5楼所说。楼主可以再增加两句话试试: TheadDemo t1 = new TheadDemo(); TheadDemo t2 = new TheadDemo(); t1.setDaemon(true); // 增加 t2.setDaemon(true); // 增加 t1.start(); t2.start();
除非设置为后台线程setDaemon(true),否则继续运行
默认情况下,你main没有调用System.exit(),其他线程还是会执行的
main方法也只是个方法,虚拟机的生命周期起始于main方法,结束于所有非守护线程退出
理解一下: * Marks this thread as either a daemon thread or a user thread. The * Java Virtual Machine exits when the only threads running are all * daemon threads. 在JVM没有exits之前,起动的线程都会执行到run方法完成而死亡。 而JVM的exits,是在最后一个非daemon线程执行完成之时。 感谢各位的解答,分不够用,实在抱歉,Thanks
没有结束,只要子线程不是daemon线程,子线程与其他主线程没区别,也相互没有关系。public class ThreadMainDemo implements Runnable{ private Thread mainThread; public ThreadMainDemo(Thread main){ mainThread = main; } public void run(){ while(true){ System.out.println("主线程是否存活" + mainThread.isAlive()); }
} public static void main(String[] args){ System.out.println("main线程开始"); System.out.println("子线程开始"); new Thread(new ThreadMainDemo(Thread.currentThread())).start(); try{ Thread.sleep(100); }catch(Exception e){ } System.out.println("main线程结束");
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"StEXE");
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+" "+i);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"ENDED");
}
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"ExeD");
TheadDemo t1 = new TheadDemo();
TheadDemo t2 = new TheadDemo();
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName()+"ENDEd");
}
}
/////////////////////////out//////////////////////
mainExeD
mainENDEd
Thread-1StEXE
Thread-0StEXE
Thread-0 0
Thread-1 0
Thread-0 1
Thread-1 1
Thread-1 2
Thread-0 2
Thread-0 3
Thread-1 3
Thread-1 4
Thread-0 4
Thread-1 5
Thread-0 5
Thread-1 6
Thread-0 6
Thread-1 7
Thread-0 7
Thread-0 8
Thread-1 8
Thread-0 9
Thread-1 9
Thread-1ENDED
Thread-0ENDED从它的运行结果看,main先执行结束,但其它还再执行??
如我5楼所说。楼主可以再增加两句话试试:
TheadDemo t1 = new TheadDemo();
TheadDemo t2 = new TheadDemo();
t1.setDaemon(true); // 增加
t2.setDaemon(true); // 增加
t1.start();
t2.start();
* Marks this thread as either a daemon thread or a user thread. The
* Java Virtual Machine exits when the only threads running are all
* daemon threads.
在JVM没有exits之前,起动的线程都会执行到run方法完成而死亡。
而JVM的exits,是在最后一个非daemon线程执行完成之时。
感谢各位的解答,分不够用,实在抱歉,Thanks
private Thread mainThread;
public ThreadMainDemo(Thread main){
mainThread = main;
}
public void run(){
while(true){
System.out.println("主线程是否存活" + mainThread.isAlive());
}
}
public static void main(String[] args){
System.out.println("main线程开始");
System.out.println("子线程开始");
new Thread(new ThreadMainDemo(Thread.currentThread())).start();
try{
Thread.sleep(100);
}catch(Exception e){
}
System.out.println("main线程结束");
}
}