ExecutorService pool = Executors.newFixedThreadPool(threadCount); pool.execute(r); 这种方式运行的线程,怎么给每个线程制定一个Timeout? |
|
|
用submit方法,返回一个Future,然后调用Future中的V get(long timeout, TimeUnit unit)方法,timeout就是超时时间,超时没返回结果就会报异常,捕获异常,然后调用cancel方法
|
|
|
你是说这样么?
for(...){
futures.add( pool.submit(r););
}
for( Future<?> future : futures){
try {
future.get(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.out.println("线程中断出错。");
future.cancel(true);// 中断执行此任务的线程
} catch (ExecutionException e) {
System.out.println("线程服务出错。");
future.cancel(true);// 中断执行此任务的线程
} catch (TimeoutException e) {// 超时异常
System.out.println("超时。");
future.cancel(true);// 中断执行此任务的线程
}
}
在我这里这么做,好像线程并没有同步运行。 |
|
32分 |
差不多就这个意思 |