0

我读了这个

您如何知道该方法是成功完成还是被中断?

编辑:为了使问题更加清晰和具体。下面是我的代码..我想执行 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();  
    }  
}  
}  
4

2 回答 2

0

例如:

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(不是必须,有时继续运行会更好)。

中断状态标志

中断机制是使用称为中断状态的内部标志来实现的。调用 Thread.interrupt 设置此标志。当线程通过调用静态方法 Thread.interrupted 检查中断时,中断状态被清除。一个线程用来查询另一个线程的中断状态的非静态 isInterrupted 方法不会改变中断状态标志。

按照惯例,任何通过抛出 InterruptedException 退出的方法都会在这样做时清除中断状态。然而,中断状态总是有可能被另一个线程调用中断立即再次设置。

于 2012-06-17T16:58:55.453 回答
0

了解终止线程的最简单方法是使用布尔标志,将其称为“中断”,并在捕获InterruptedException. 假设您的代码没有执行任何其他可能引发该异常的操作,您可以在后面的代码中检查标志的值。

于 2012-06-17T15:30:36.087 回答