Java Executors.newFixedThreadPool中单个线程超时

Java Executors.newFixedThreadPool中单个线程超时,java,multithreading,threadpool,Java,Multithreading,Threadpool,我正在创建用户线程,并将它们放入大小为5的固定池中。我希望我的线程在5分钟内执行。这些线程在远程服务器上执行了一些数据库操作。但是由于网络延迟,一些线程只是停止并等待来自远程服务器的响应,因此它导致了我不想要的延迟。所以我希望所有挂起的线程在5分钟内完成,否则它们应该在特定的超时时间被终止或中断。我怎样才能做到这一点 我正在使用Jdk.1.6.045 int i = 0; ExecutorService executor = Executors.newFixedT

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

我正在使用Jdk.1.6.045

        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");
inti=0;
ExecutorService executor=Executors.newFixedThreadPool(5);
而(i<10){
ThreadClass thread=新ThreadClass();
线程设置计数器(i);
执行器。执行(线程);
i++;
}           
executor.shutdown();
System.out.println(“线程终止的连线”);
而(!executor.isTerminated()){
System.out.println(“完成所有线程”);
尝试以下方法:

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

只有当线程阻塞某些测试中断的函数时,这才有效。否则,您就做不了什么:除了中断之外,没有可靠的方法来停止线程。

名称“ThreadClass”表明它是thread的一个子类。这是真的,还是它只是Runnable的一个实现?是的,它是Thread的子类。那么它就错了。任务和线程之间存在差异。任务是必须完成的工作(通常是可运行的)。线程是并行运行代码的机制。执行者已经在内部使用线程来执行任务。ThreadClass应该是一项任务。重命名它,不要从线程派生,而是实现Runnable!我现在对我的代码做了相应的修改,谢谢!