当前位置: 首页 > 知识库问答 >
问题:

如何为Executors.newFixedThreadPool设置超时,并在超时时创建线程

西门逸仙
2023-03-14

我的程序应该使用多线程运行很长时间。我需要为线程设置超时的能力,一旦线程终止,我想重新启动它。这是我的代码:

    @Test
    public void testB() throws InterruptedException {
        final ExecutorService threadPool = Executors.newFixedThreadPool(2);
        for(int i=0; i<2; i++){
            threadPool.submit(new Runnable() {
                public void run() {
                        System.out.println("thread start: " + Thread.currentThread().getName());
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            });
        }
        threadPool.shutdown();
        threadPool.awaitTermination(100000, TimeUnit.SECONDS);
    }

共有1个答案

缑嘉玉
2023-03-14

下面的代码将反复运行相同的任务。该池将在给定时间后关闭。

这似乎可以满足您的要求。

final ExecutorService threadPool = Executors.newFixedThreadPool(2);

for(int i = 0; i < 2; i++){
    final int taskNb = i;
    threadPool.submit(new Runnable() {
        public void run() {
            System.out.println("Thread " + taskNb + " start: " + Thread.currentThread().getName());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // Submit same task again
            threadPool.submit(this);

        }
    });
}

// Only shutdown the pool after given amount of time
Thread.sleep(100_000_000);
threadPool.shutdown();

// Wait for running tasks to finish
threadPool.awaitTermination(5, TimeUnit.SECONDS);
 类似资料:
  • 我有一个TcpClient,用于将数据发送到远程计算机上的侦听器。远程计算机有时打开,有时关闭。因此,TCP客户端将经常无法连接。我希望TcpClient在一秒钟后超时,这样当它无法连接到远程计算机时就不会花费太多时间。目前,我对TcpClient使用以下代码: 这对于处理任务来说已经足够好了。如果可以,它会发送它,如果无法连接到远程计算机,它会捕获异常。然而,当它无法连接时,抛出异常需要10到1

  • 问题内容: 我已经按照kuester2000的回答进行了操作,但是我的超时设置似乎不起作用。 但是,超时值不变。 在我链接的答案中,它还说: 连接超时抛出“ java.net.SocketTimeoutException:套接字未连接”,套接字超时抛出“ java.net.SocketTimeoutException:操作超时”。 但是我都没有。相反,我收到“ org.apache.http.co

  • 当微服务处理业务逻辑时间过长,网关会报超时错误,默认等待时间是5秒。 可在网关指定spring.cloud.gateway.httpclient.response-timeout参数设置超时时间,单位毫秒 # 设置响应超时10秒 spring.cloud.gateway.httpclient.response-timeout=10000 更多配置参见:org.springframework.cl

  • <?php $http = HttpRequest::newSession(); $response = $http->timeout(3000, 1000) // 总时间不得超过3秒,连接时间不得超过1秒 ->get('https://www.baidu.com/'); $content = $response->body(); // 网页源码

  • 问题内容: 我创建了以下函数来检查连接状态: 当我关闭服务器以测试执行情况时,会在网上等待很长时间 有谁知道如何设置超时以避免等待太久? 问题答案: 在我的示例中,设置了两个超时。连接超时抛出,套接字超时。 如果要设置任何现有HTTPClient的参数(例如或,则可以使用函数。

  • 问题内容: 我org.springframework.ws.client.core.WebServiceTemplate用于拨打Web服务。如何为通话配置超时。 问题答案: 如果你使用的是Spring Webservices 2.1.0版本,则可以使用HttpComponentsMessageSender设置超时。 Spring不推荐使用CommonsHttpMessageSender,因此不再推