Executors.newFixedThreadPool中各个线程的超时

时间:2014-01-13 08:00:32

标签: java multithreading threadpool

我正在创建用户线程并将它们放在size = 5的固定池中。我希望我的线程在5分钟内执行。这些线程在远程服务器上完成了一些数据库操但由于网络延迟,一些线程只是停止并等待来自远程服务器的响应,因此它导致我不想要的延迟。所以我希望所有挂起的线程在5分钟内完成,否则它们应该在某些超时时被杀死或中断。我怎样才能做到这一点。

我正在使用Jdk.1.6.0_45

        int i = 0;
        ExecutorService executor = Executors.newFixedThreadPool(5);
        while (i < 10) {
            ThreadClass thread = new ThreadClass();
            thread.setCounter(i);
            executor.execute(thread);
            i++;
        }           
        executor.shutdown();
        System.out.println("Wiating for threads to terminate");

        while (!executor.isTerminated()) {}

        System.out.println("Finished all threads");

1 个答案:

答案 0 :(得分:1)

尝试这种方式:

executor.shutdown();
if (!executor.awaitTermination(5, TimeUnit.MINUTES)) {
    executor.shutdownNow();
}

仅当您的线程阻塞某些测试中断的函数时,这才有效。否则你不能做太多:除了中断之外,没有办法可靠地停止线程。