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分 |
差不多就这个意思 |