import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class ThreadWRDemo {
public static void main(String[] args) throws IOException {
final List<String> list = new ArrayList<String>();
final Scanner s = new Scanner(System.in);
final PrintWriter writer =new PrintWriter(new FileOutputStream("ThreadWrite.txt"));
final Thread wthread = new Thread() {
public void run() {
while (true) {
if (list.isEmpty()) {
try {
writer.flush();
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("结束了!!");

continue;
}

String first = list.remove(0);
writer.println(first);
}
}
};
wthread.setDaemon(true);
final Thread rthread = new Thread() {
public void run() {
while (true) {
String str = s.nextLine();
list.add(str);
if (str.equalsIgnoreCase("Q")) {
wthread.interrupt();
break;
}
}
}
};
wthread.start();
rthread.start();
}
}
为什么在rthread 线程结束后wthread   还可以运行写入操作?
而且wthread.interrupt()操作是唤醒并运行wthread 线程还是先执行完rthread 线程后在运行?????

解决方案 »

  1.   

    线程的interrupt()方法只是将线程的一个boolean变量置为true,表示发生了中断,而且你的wthread线程根本就是永远不会退出。
      

  2.   

    不会呀      wthread是守护线程   前台进程没了就会退出
      我想问哈    为什么rthead前台线程退出时       wthread没有立即退出???
      

  3.   

    没注意到你的wthread是守护线程,如果只剩守护线程虚拟机就会退出了,难道你的wthread没退出?
      

  4.   

    jdk1.6 测试没问题 能正常结束。不知道楼主什么问题?输入+输出结果:q
    结束了!!
      

  5.   

    不知道楼主是不是理解下面方法调用时,线程就结束了。
     wthread.start();
     rthread.start();其实这两个是线程刚刚启动,会调用各种的run方法,然后不断地进行循环。直到输入Q为止。至于第二个问题:wthread.interrupt()操作是唤醒并运行wthread 线程还是先执行完rthread 线程后在运行?????这个和操作系统的中断机制有关,我也不清楚。