我到底如何调用.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();
}
}
}
最佳答案
如果您要调用 interrupt()
,您会从与 sleep() 不同的线程中调用它。
如果您想在同一线程中途中断 sleep(),您可以这样做:
Thread.sleep( 500 );
...
Thread.sleep( 500 );
总而言之,sleep() 可能是一种代码味道。
编辑(OP编辑后):
在 actionPerformed() 方法中从 GUI 线程调用 StoplightThread 上的 interrupt()。
关于java - 调用并使用 .interrupt() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16531790/