如何在特定的持续时间内运行方法?

时间:2012-06-17 15:23:04

标签: java multithreading

我看了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();  
    }  
}  
}  

2 个答案:

答案 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退出的方法都会在执行此操作时清除中断状态。但是,通过另一个调用中断的线程,总是可以立即再次设置中断状态。