首先看段简单的线程代码:
public class Demo {
    public static void main(String[] args) {
        Thread t=new Thread(new StopRunnable());
        t.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            System.out.println("xxxxxxxxxxx");
            e.printStackTrace();
        }
        Thread.currentThread().interrupt();
        System.out.println(Thread.currentThread().isInterrupted());
        t.interrupt();
        System.out.println("main thread over.");
    }
}class StopRunnable implements Runnable{
    @Override
    public void run() {
        int i=1;
        while(!Thread.currentThread().interrupted()){
            System.out.println(i++);
        }
    }
}问题: 下面这个程序片段我不是很明白Thread.currentThread().interrupt();
System.out.println(Thread.currentThread().isInterrupted());
t.interrupt();
System.out.println("main thread over.");
线程t在主线程中运行,Thread.currentThread().interrupt(); 使主线程终止。
主线程终止代表程序已经结束。后面的代码应该不执行。
但实际控制台却有输出,为什么啊??????

解决方案 »

  1.   

    不是主线程退出就全部退出,而是所有 非 deamon 线程退出就全部退出。另外,这种代码是菜鸟写的,如果你是在看别人的代码就请忘记它,完全错误的设计。你可以先把 java.sun.com 或 developerworks.ibm.com 之类的网站上找个线程的文章或教程看一下,人家讲得更系统。熟悉基本的线程操作过程和锁之后,可以考虑了解一个“生产者--消费者”样例实现,了解同步的怎么回事。同步的搞懂了,线程的问题基本上也就熟悉了,多数情况下对线程的了解有这些就能解决一般的问题。
      

  2.   


    谢谢你的建议,ibm developerworks的文章是要好好拜读一下。 在看精辟的文章之前,我想先把基础知识掌握好一点。