黑马程序员技术交流社区

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

作者: 韩俊杰    时间: 2012-12-20 23:37
标题: 线程小问题
本帖最后由 韩俊杰 于 2012-12-25 18:05 编辑

package practice;

class stopThreadDemo implements Runnable{
        private boolean flag=true;
        public synchronized void run(){
                while(flag){
                        try{
                                wait();
                        }catch(InterruptedException e){
                                System.out.println(Thread.currentThread().getName()+"...exception");
                                flag=false;
                        }
                        System.out.println(Thread.currentThread().getName()+"...run");
                }
        }
        
        public void ChangeFlag(){
                flag=false;
        }
}

public class StopDemo {
        public static void main(String[] args) {
                stopThreadDemo st=new stopThreadDemo();
               
                Thread th1=new Thread(st);
                Thread th2=new Thread(st);
                th1.setDaemon(true);
                th2.setDaemon(true);
                th1.start();
                th2.start();
               
                int num=0;
                while(true){
                        if (num++==60){
                                //st.ChangeFlag();
                               /*th1.interrupt();//强制清除冻结状态恢复到运行状态
                                th2.interrupt();*/
                                break;
                        }
                        System.out.println(Thread.currentThread().getName()+"..."+num);
                }

        }
}

有一点不明白就是什么是个守护线程?还有就是红颜色的两部分都能使线程结束,那应该用哪一个?

作者: 罗海清    时间: 2012-12-21 12:59
请看我调试的结果吧,相信你会明白的
import java.io.*;


public class TestMain extends Thread {
   
    public TestMain() {
    }
    public void run() {
        for(int i = 1; i <= 10; i++){
            try {
                Thread.sleep(3000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            System.out.println(i);
        }
                System.out.println("我结束了");
    }
   
    public static void main(String [] args)throws Exception{
        TestMain test = new TestMain();
        test.setDaemon(true);
        test.start();
        System.out.println("isDaemon = " + test.isDaemon());
                int i = 20;
       while(true)
           {
                        Thread.sleep(1000*3);
                        System.out.println(i--);
                        if(i==17)
                    {
                                System.out.println("主线程结束");
                                break;
                        }
                               
           }
    }
}


1、当普通线程运行结束时,本例的“主线程”,系统不管你这个守护线程有没有结束,我都退出
2、至于有什么实际应用,我也是菜鸟,不过我同意网上说的,jvm的垃圾回收线程,是一个守护线程。
3、还有输入法的后台线程,就是守护线程,它可以限制你的输入对不对,给出提示,我也同意这个说法。
4、有什么不对的,请各个师兄弟姐妹指出

守护.PNG (11.1 KB, 下载次数: 21)

守护线程例子运行结果

守护线程例子运行结果





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