黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: 王雷1    时间: 2013-11-27 10:49
标题: 线程问题
import java.io.*;
class test5
{
public static void main(String[] args)throws IOException
{
  san s=new san();
  Thread t1=new Thread(s);
  Thread t2=new Thread(s);
  t1.setDaemon(true);
  t2.setDaemon(true);
  t1.start();
  t2.start();
  System.out.println(Thread.currentThread().getName());
  //当主线程读到这个打印语句时是前台线程,因为有上面的守护线程,
  //所以为什么前台线程的主线程结束而后台线程没有跟着一起死亡
} //还是我根本理解的不对?
}
class san implements Runnable{
public void run(){
  for(int x=0;x<30;x++)System.out.println(Thread.currentThread().getName()+":::::"+x);
}
}

作者: 樊志伟    时间: 2013-11-27 11:12
你所说的问题是为什么在前台线程结束后,后台线程还在打印东西,是吧?
在你的代码中后台线程确实已经在前台线程结束后结束了,而还在打印的东西是后台线程在前台线程还未结束是就已经运算完未来得及打印的。
可以通过下面的代码进行验证。
  1. import java.io.*;
  2. class test5
  3. {
  4. public static void main(String[] args)throws IOException
  5. {
  6.    san s=new san();
  7.    Thread t1=new Thread(s);
  8.    Thread t2=new Thread(s);
  9.    t1.setDaemon(true);
  10.    t2.setDaemon(true);
  11.    t1.start();
  12.    t2.start();
  13.    try{Thread.sleep(10);}catch(Exception e){}
  14.    System.out.println(Thread.currentThread().getName());
  15. }
  16. class san implements Runnable{
  17. public void run(){
  18.    for(int x=0;x<300;x++)
  19.         System.out.println(Thread.currentThread().getName()+":::::"+x);
  20.         }
  21. }
复制代码

作者: 王雷1    时间: 2013-11-27 11:22
樊志伟 发表于 2013-11-27 11:12
你所说的问题是为什么在前台线程结束后,后台线程还在打印东西,是吧?
在你的代码中后台线程确实已经在前 ...

呵呵,非常感谢
作者: Simple_love    时间: 2013-11-27 11:46
可能你主线程是结束一瞬间, 两个后台程序就运行完, 你把那个x取值范围调到1000这时两个后台程序就会运行一半就会结束
作者: FFF    时间: 2013-12-2 00:19
同学、问题已经解决了吗?
如果没有、就去新版28期问吧,26~27已经结束了。开班了!
http://bbs.itheima.com/forum-165-1.html

如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2