让线程中断的疑问
网上查了下,线程中断一般用interrupt() 方法,我现在的情况是线程T已经启动,T线程中调用了一个用户函数F,该函数可能会执行很长时间,但我要检测它如果该函数指定时间内未返回就要中断它,并且我的T线程中要能继续处理。
我发现用interrupt方法需要在T中调用sleep才会抛出InterruptedException,还有就是通过while (!isInterrupted)...{来判断,但是为什么是一个循环呢?我的程序只是一个函数,又不会重复的执行,怎么要用循环来判断??还有我的程序中也不一定会sleep啊,如何中断我的F呢?
[解决办法]
java.util.concurrent中的
ExecutorService Future
对解决这个需求有所帮助,
不过since jdk1.5
[解决办法]
简单起见,上代码吧
package test;public class TestThread { /** * @param args */ public static void main(String[] args) { test a = new test(); p(a); p(a); a.start(); p(a); p(a); p(a); // a.stop(); <=== 这里是尝试用各种方法终端线程的地方 // a.interrupt(); p(a); p(a); p(a); p(a); p(a); p(a); p(a); p(a); p(a); p(a); p(a); p(a); p(a); } static long ts = System.currentTimeMillis(); private static void p(test a) { System.out.println(System.currentTimeMillis() - ts + ": Thread.isAlive=" + a.isAlive()); try { Thread.sleep(300); } catch (InterruptedException e) { } } static class test extends Thread { public void run() { System.out.println("I'm running"); sleepAnyWay(1000); System.out.println("I'm running again"); sleepAnyWay(1000); System.out.println("I'm gonna to quit"); sleepAnyWay(1000); } // 这个函数模拟线程中的用户函数把 interrupt异常吃掉的情况 void sleepAnyWay(long ts) { try { Thread.sleep(ts); } catch (InterruptedException e) { } } }}