如何在此上下文中使用interrupt()

时间:2011-11-08 09:06:31

标签: java multithreading

如果run()没有完成并从外面调用,我需要先完成运行的shread。

public class EnvTime extends Thread {
    public void run() {
        long step = 2000 / benvelope1.length;
        while (!finished) {
            for (int i = 0; i < benvelope1.length; i++) {
                envOut = benvelope1[i];
                try {
                    Thread.sleep(step);
                } catch (InterruptedException benvelope1) {
                    benvelope1.printStackTrace();
                }
            }
        }
    }
}

所以我用另一种方法调用此代码:

Env interpol;

interpol.interrupt(); //

interpol=new EnvTime();

interpol.start();

但这不起作用......

2 个答案:

答案 0 :(得分:1)

目前尚不清楚你想要实现的目标,而是通过

来实现
Env interpol;

interpol.interrupt(); //
你可能得到NullPointerException。如果您希望代码到达

} catch (InterruptedException benvelope1) {
    ...
}

你需要确保该线程在try - 块中,特别是当你中断它时,在Thread.sleep方法中。

换句话说,在中断之前,你至少需要启动帖子

答案 1 :(得分:0)

您应该在代码中的某处更改finished。 像这样:

        try {
            Thread.sleep(step);
        } catch (InterruptedException benvelope1) {
            finished = true;
            benvelope1.printStackTrace();
        }

也许您还应该等待线程在启动新线程之前真正终止。使用join:

interpol.interrupt(); 
interpol.join();
interpol=new EnvTime();
interpol.start();