在30秒内停止线程并重试

时间:2015-07-10 19:38:42

标签: java timer java-threads

我有一个正在调用外部应用程序的Restful Service。这个应用程序正在使我的服务挂起。因此,当用户调用我的服务时,由于此外部应用程序可能需要一个小时。外部应用程序应该只需几秒钟即可执行。否则,出了点问题。所以我希望我的服务中的代码执行最多30秒。如果它超过30秒标记,我想停止服务并重新启动它。

这就是我想要的:

    public static void main(String[] args){

    Thread thread = new Thread(){
        public void run(){
            System.out.println("Hello Thread");
        }
    };

    thread.start();

    //if thread is alive in 30 seconds, stop and retry

}

我不希望代码每30秒执行一次。我希望能够停止代码执行并从头开始重新启动它。

这是服务:

@Path("/test")
@GET
@Produces(MediaType.APPLICATION_JSON )
public Response test(@QueryParam("input") String input) {
    //call external application... if it hangs, it will take more than 30 seconds...

}

2 个答案:

答案 0 :(得分:1)

您正在谈论Timeout,对吧?

我在这个类中通常实现TimeoutCmd接口的方法是关闭你想要读取的InputStream。这将引发异常并释放正在等待的线程。

其他时候,使用Thread.interrupt可以有效地停止长时间运行的线程,如果它定期检查THread.interrupt值

答案 1 :(得分:0)

http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html

您可以使用TimerTask执行此操作。