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

标签 java multithreading

我的程序应该在多线程下运行很长时间。 我需要能够为线程设置超时,一旦线程终止,我想再次启动它。 这是我的代码:

    @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);
    }

最佳答案

下面的代码将一遍又一遍地对任务运行相同的代码。 池将在给定时间后关闭。

这似乎符合您的要求。

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);

关于java - 如何为 Executors.newFixedThreadPool 设置超时并在超时后创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997137/

相关文章:

java - 如何知道其他线程是否已经完成?

java - Webdriver异常:Double cannot be cast to java. lang.String

java - Servlet ServletFileUpload 的最大文件大小

java - 为什么 'this'可以作为Java中这里的参数?

objective-c - @synchronized - 跳过而不是等待

java - 基于数据库更新和时间间隔触发 Java 程序

java - 如何异步修改字符串数组

java - 无法找到或启动 Activity Intent

java - bufferedwriter 与系统输出 println

C - 如何运行一个线程几秒钟,然后继续运行第二个线程