多线程 Thread

meacial 2012-08-29 08:47:39
多线程中,
main线程结束后,main中创建的其它的线程还继续运行吗?
...全文
157 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
newlifeinsc 2012-08-30
  • 打赏
  • 举报
回复
没有结束,只要子线程不是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线程结束");

}
}
meacial 2012-08-30
  • 打赏
  • 举报
回复
理解一下:
* 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
BadPattern 2012-08-30
  • 打赏
  • 举报
回复
main方法也只是个方法,虚拟机的生命周期起始于main方法,结束于所有非守护线程退出
rorom 2012-08-30
  • 打赏
  • 举报
回复
默认情况下,你main没有调用System.exit(),其他线程还是会执行的
iGoodLoser 2012-08-30
  • 打赏
  • 举报
回复
除非设置为后台线程setDaemon(true),否则继续运行
MiceRice 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
从它的运行结果看,main先执行结束,但其它还再执行??
[/Quote]

如我5楼所说。

楼主可以再增加两句话试试:
TheadDemo t1 = new TheadDemo();
TheadDemo t2 = new TheadDemo();
t1.setDaemon(true); // 增加
t2.setDaemon(true); // 增加
t1.start();
t2.start();
meacial 2012-08-30
  • 打赏
  • 举报
回复
public class TheadDemo extends Thread{
@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先执行结束,但其它还再执行??
结贴是美德 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

楼上这两位所说的结论。。。自己测试过么?

如果所创建子线程是Daemon线程(setDaemon(true)),那么主线程结束,程序就会终止。

否则,就要等所有线程结束,程序才会终止。
[/Quote]

顶顶顶。。。
MiceRice 2012-08-29
  • 打赏
  • 举报
回复
楼上这两位所说的结论。。。自己测试过么?

如果所创建子线程是Daemon线程(setDaemon(true)),那么主线程结束,程序就会终止。

否则,就要等所有线程结束,程序才会终止。
ncist_jianeng 2012-08-29
  • 打赏
  • 举报
回复
不运行
孤雨 2012-08-29
  • 打赏
  • 举报
回复
main方法结束后,程序就退出了。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧