我到底该如何调用.interrupt()方法?当我拥有Thread.sleep(1000)时,我应该在何时何地调用.interrupt()方法?是在之后吗?我想要做的是在中途阻止Thread.sleep(1000)。
编辑::
我在停止中间的一个线程时遇到了麻烦。这是我的代码的一部分,在StoplightThread类中,我对第一个if语句有问题。它应该做的是等待至少10秒,然后让用户按下按钮,这样他们就可以改变灯光,如果按钮被按下,它应该停止正在运行的线程,在本例中为Thread.sleep(40000)。发生的情况是,当我按下按钮时,它会改变灯光,但不会停止线程。如果我在还剩20秒的时候按下按钮,黄灯将在10秒的基础上再增加20秒,使黄灯持续30秒。
编辑:如果你想知道,stoplightCanvas.x == 3是绿色的,stoplightCanvas.x == 2是黄色的,stoplightCanvas.x == 1是红色的。
class StoplightCanvas extends Canvas implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == cross) {
isPressed = true;
if (x == 3 && canCross)
x = 2;
}
repaint();
}
}
class StoplightThread extends Thread
{
StoplightCanvas stoplightCanvas;
StoplightThread(StoplightCanvas stoplightCanvas) {
this.stoplightCanvas = stoplightCanvas;
}
public void run()
{
if (stoplightCanvas.x == 3){
Thread.sleep(10000);
stoplightCanvas.canCross = true;
Thread.sleep(40000);
if(stoplightCanvas.isPressed)
StoplightThread.interrupt();
} else if (stoplightCanvas.x == 2) {
Thread.sleep(10000);
} else if (stoplightCanvas.x == 1) {
Thread.sleep(60000);
}
} catch (InterruptedException e){}
stoplightCanvas.toggleColor();
stoplightCanvas.repaint();
}
}
}发布于 2013-05-14 05:55:12
如果要调用interrupt(),那么应该从不同于sleep()的线程调用它。
如果您想在同一线程中途中断sleep(),您可以这样做:
Thread.sleep( 500 );
...
Thread.sleep( 500 );尽管如此,sleep()可能是一种代码味道。
编辑(在OP编辑之后):
从actionPerformed()方法中的GUI线程调用StoplightThread上的interrupt()。
发布于 2013-05-14 06:03:15
试一下这个例子
public class Test1 {
public static void main(String[] args) throws Exception {
Thread t = new Thread() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t.start();
Thread.sleep(1000);
t.interrupt();
}
}它打印出来
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at test.Test1$1.run(Test1.java:9)发布于 2013-05-14 05:55:53
您需要一个对要中断的线程的引用,以便可以从不同的线程对其调用interrupt()。
https://stackoverflow.com/questions/16531790
复制相似问题