首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

让线程间断的疑问

2012-06-20 
让线程中断的疑问网上查了下,线程中断一般用interrupt() 方法,我现在的情况是线程T已经启动,T线程中调用了

让线程中断的疑问
网上查了下,线程中断一般用interrupt() 方法,我现在的情况是线程T已经启动,T线程中调用了一个用户函数F,该函数可能会执行很长时间,但我要检测它如果该函数指定时间内未返回就要中断它,并且我的T线程中要能继续处理。

我发现用interrupt方法需要在T中调用sleep才会抛出InterruptedException,还有就是通过while (!isInterrupted)...{来判断,但是为什么是一个循环呢?我的程序只是一个函数,又不会重复的执行,怎么要用循环来判断??还有我的程序中也不一定会sleep啊,如何中断我的F呢?


[解决办法]
java.util.concurrent中的
ExecutorService Future
对解决这个需求有所帮助,
不过since jdk1.5
[解决办法]
简单起见,上代码吧

Java code
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) {            }        }    }} 

热点排行