callable&future的使用

原创 2012年03月25日 11:50:52
//这是callable与future的使用方式
public class CallableAndFuture {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ExecutorService threadPool =  Executors.newSingleThreadExecutor();
		//Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的
		//Callable要采用ExecutorSevice的submit方法提交,返回的future对象可以取消任务
		Future<String> future =
			threadPool.submit(
				new Callable<String>() {
					public String call() throws Exception {
						Thread.sleep(2000);
						return "hello";
					};
				}
		);
		System.out.println("等待结果");
		try {
			System.out.println("拿到结果:" + future.get());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象
		ExecutorService threadPool2 =  Executors.newFixedThreadPool(10);
		CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2);
		for(int i=1;i<=10;i++){
			final int seq = i;
			completionService.submit(new Callable<Integer>() {
				@Override
				public Integer call() throws Exception {
					Thread.sleep(new Random().nextInt(5000));
					return seq;
				}
			});
		}
		for(int i=0;i<10;i++){
			try {
				System.out.println(
						completionService.take().get());
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ExecutionException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	

}

相关文章推荐

Callable,Future的使用方式

  • 2014年12月18日 11:38
  • 7KB
  • 下载

Java并发编程:Callable和Future使用

在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口。然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果。我们一般只能采用共享变量或共享存储区以及...

高级并发编程学习-callable与Future的使用

FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过Fu...

java中的Callable和Future的使用和困惑

java中还提供了可以返回值的线程池,例子如下: import java.util.concurrent.Callable; import java.util.concurrent.Execu...
  • com360
  • com360
  • 2011年09月21日 12:20
  • 9655

Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果

1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程。使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存...

使用Callable和Future两个类,来获得线程执行后的结果

获取线程执行后的结果

Callable和future的使用

在java中,我们知道创建线程一般有2中方式,一种是继承Thread,一种是实现Runable接口。但是这两种方法都不能返回线程处理后果的结果,如果想要获取线程处理过后的结果,需要共享线程变量或线程间...

多线程任务Callable与Future或FutureTask的使用

在进行多线程任务时,我们可以使用Thread、Runnable已经java5以后新增的concurrent包内的Callable,Runable跟Thread的用法就不说了,这里要说的是使用Runna...

Java中的Runnable、Callable、Future、FutureTask的区别和CompletionService的使用场景

Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别。...
  • jdsjlzx
  • jdsjlzx
  • 2016年10月24日 16:17
  • 3238

Java并发编程实践之Callable,Future,RutureTask的使用

一般使用线程有两种方式:继承Thread类重写run方法;另一种就是实现Runnable接口,实现run方法。但是run方法没有返回值,假如我们在使用线程的时候想要知道运行结果,就只能使用重写run方...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:callable&future的使用
举报原因:
原因补充:

(最多只允许输入30个字)