我看了this
您如何知道方法是否成功完成或是否被中断?
编辑:使问题更清晰,更具体。下面是我的代码..我想执行test.java文件并获取其运行时..但是如果它需要超过1我希望显示一条错误信息并将其自行停止..
public class cl {
public static void main(String args[])throws IOException
{
String s=null;
Process p=Runtime.getRuntime().exec("javac C:\\Users\\Lokesh\\Desktop\\test.java");
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
Timer timer=new Timer(true);
InterruptTimerTask interruptTimerTask=new InterruptTimerTask(Thread.currentThread());
timer.schedule(interruptTimerTask,1);
try{
Runtime.getRuntime().exec("java C:\\Users\\Lokesh\\Desktop\\test");
}
catch (Exception e)
{
e.printStackTrace();
}
finally {
timer.cancel();
}
}
static class InterruptTimerTask extends TimerTask {
private Thread thread;
public InterruptTimerTask(Thread thread)
{
this.thread=thread;
}
@Override
public void run()
{
thread.interrupt();
}
}
}
答案 0 :(得分:0)
了解终止线程的最简单方法是使用布尔标志,将其称为“中断”,并在捕获InterruptedException
时设置它。假设你的代码没有做任何可以抛出异常的事情,你可以检查后面代码中的标志值。
答案 1 :(得分:0)
作为exapmle:
try {
Thread.sleep(10000);
// method successfully completed
} catch (InterruptedException ex) {
// method was interrupted. You can try sleep some more time if you want
}
Thread.sleep()
是可以中断的方法之一。可以有任何其他方法,甚至是你的方法,如果它检查它的中断状态。如果你的方法意识到有人想要打断它,它必须抛出InterruptedException
(不是必须的,有时继续运行会更好)。
<强> The Interrupt Status Flag 强>
使用称为中断状态的内部标志实现中断机制。调用Thread.interrupt设置此标志。当线程通过调用静态方法Thread.interrupted来检查中断时,将清除中断状态。非静态isInterrupted方法,一个线程用来查询另一个线程的中断状态,不会改变中断状态标志。
按照惯例,任何通过抛出InterruptedException退出的方法都会在执行此操作时清除中断状态。但是,通过另一个调用中断的线程,总是可以立即再次设置中断状态。