java - Executors.newFixedThreadPool 中各个线程的超时

标签 java multithreading threadpool

我正在创建用户线程并将它们放入大小=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");

最佳答案

试试这个方法:

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

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

关于java - Executors.newFixedThreadPool 中各个线程的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086379/

相关文章:

javax.servlet.ServletException : Wrapper cannot find servlet class

java - 了解工作单元

java - 如何分析线程生命周期性能

Java - 在使用 JButton 执行时暂停线程池

Java扫描器多个/多个分隔符条件

Java线程中断异常

java - 用 Java 流式传输视频

C++:如果发生段错误或类似的事情,有没有办法杀死单个线程但保持应用程序运行?

java - 关闭正在队列上读取的守护进程线程

c# - 如果在 ThreadPool 的线程正在写入文件时应用程序关闭,会发生什么情况?