java线程池里的线程,怎么设置Timeout

J2EE 码拜 10年前 (2015-04-04) 1420次浏览 0个评论
 
ExecutorService pool = Executors.newFixedThreadPool(threadCount);
pool.execute(r);

这种方式运行的线程,怎么给每个线程制定一个Timeout?
超时了直接结束线程。

java线程池里的线程,怎么设置Timeout
用submit方法,返回一个Future,然后调用Future中的V get(long timeout, TimeUnit unit)方法,timeout就是超时时间,超时没返回结果就会报异常,捕获异常,然后调用cancel方法
java线程池里的线程,怎么设置Timeout
引用 1 楼 longtian1213 的回复:

用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);// 中断执行此任务的线程   
	}
}

在我这里这么做,好像线程并没有同步运行。

java线程池里的线程,怎么设置Timeout
32分
引用 2 楼 zengjd 的回复:
Quote: 引用 1 楼 longtian1213 的回复:

用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);// 中断执行此任务的线程   
	}
}

在我这里这么做,好像线程并没有同步运行。

差不多就这个意思


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java线程池里的线程,怎么设置Timeout
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!