2017-12-27 925 views
0

我的程序应该在多线程中运行很长时间。 我需要为线程设置超时的能力,一旦线程终止,我想再次启动它。 这里是我的代码:如何为Executors.newFixedThreadPool设置超时时间,并在达到超时时创建线程

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

所以你想要做的是一遍又一遍地运行相同的任务,直到达到给定的超时? – Ward

+0

是的。如果在其中一个线程上达到超时,那么我需要执行另一个线程。例如 - 我需要2一直运行2线程 –

回答

1

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

这似乎是做你的要求。

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

非常感谢你! –