Future的使用

1、定义
Future是JAVA并发框架Executor中的一个类,Executor就是Runnable和Callable的调度容器,Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果操作,用get()可以获得执行结果。

2、举例

public class FutureTask(){
	private static ExecutorService pool = Executors.newFixedThreadPool(1);//1
	
	public static void main(String[] args){
		futureRunnable();
		futureCallable();
	}
	public static void futureRunnable(){
	Future<?> future = pool.submit(new Runnable(){ //2
		@Override
		public void run() {
			String str = "future runnable!";
			System.out.println(str);
		}
		});
		pool.shutdown();
		try {
			System.out.println("future get = " + future.get());//3
		} catch (InterruptedException | ExecutionException e) {
			e.printStackTrace();
		}
	}
	public static void futureCallable(){
		Future<?> future = pool.submit(new Callable<String>(){
			@Override
			public String call() throws Exception {
				String str = "future callable!";
				System.out.println(str);
				return str;
			}
		});
		pool.shutdown();
		try {
			System.out.println("future get = " + future.get());
		} catch (InterruptedException | ExecutionException e) {
			e.printStackTrace();
		}
	}
}

3、输出结果
在这里插入图片描述
4、分析
Future的Runnable进行执行的结果get到的值是null,因为Runnable重写了run()函数,而run()函数是没有返回值的。
Future的Callable进行执行的结果get到的值是返回值,因为Callable重写的call()函数有返回值。

5、使用步骤

  • 创建线程池ExecutorService pool
  • 提交任务pool.submit()
  • 关闭线程池pool.shutdown()
  • 获得执行结果(future.get())、取消任务(future.cancel(boolean))、查询是否完成(future.isDone())、查询是否取消(future.isCancelled())

更加详细的使用规则,请参考
Java中的Runnable、Callable、Future、FutureTask的区别与示例

猜你喜欢

转载自blog.csdn.net/weixin_40626699/article/details/88789820
今日推荐