How to timeout a thread

后端 未结 17 1123
时光说笑
时光说笑 2020-11-22 01:01

I want to run a thread for some fixed amount of time. If it is not completed within that time, I want to either kill it, throw some exception, or handle it in some way. How

17条回答
  •  长发绾君心
    2020-11-22 01:35

    The following snippet will start an operation in a separate thread, then wait for up to 10 seconds for the operation to complete. If the operation does not complete in time, the code will attempt to cancel the operation, then continue on its merry way. Even if the operation cannot be cancelled easily, the parent thread will not wait for the child thread to terminate.

    ExecutorService executorService = getExecutorService();
    Future future = executorService.submit(new Callable() {
        public SomeClass call() {
            // Perform long-running task, return result. The code should check
            // interrupt status regularly, to facilitate cancellation.
        }
    });
    try {
        // Real life code should define the timeout as a constant or
        // retrieve it from configuration
        SomeClass result = future.get(10, TimeUnit.SECONDS);
        // Do something with the result
    } catch (TimeoutException e) {
        future.cancel(true);
        // Perform other error handling, e.g. logging, throwing an exception
    }
    

    The getExecutorService() method can be implemented in a number of ways. If you do not have any particular requirements, you can simply call Executors.newCachedThreadPool() for thread pooling with no upper limit on the number of threads.

提交回复
热议问题