首页 > 学院 > 开发设计 > 正文

Future接口学习笔记

2019-11-06 07:50:18
字体:
来源:转载
供稿:网友

Future:java.util.concurrent包下的一个接口。 Callable和Runnable接口区别:

Callable需要实现的方法是call(),Runnable需要实现的方法是run();call方法有返回值,run方法的返回值为void;call方法可以抛出异常,run方法不会抛出异常。Callable所在包为java.util.concurrent,Runnable所在包为java.lang。

相同点:二者都能封装任务代码,支持多线程。

通过Future接口可以获得执行任务的一些信息,如任务是否完成等。

早期创建线程的两种方式:继承Thread类,实现Runnable接口;

缺陷:不能获得执行结果,如果采用共享变量或线程间通信来实现,无疑会导致开发难度加大;

后期引入了Callable和Future接口。 Future通常和ExecutorService配合使用:

import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;class Task implements Callable<Integer>{ @Override public Integer call() throws Exception { System.out.PRintln("子线程在进行计算"); Thread.sleep(3000); int sum = 0; for(int i=0;i<100;i++) sum += i; return sum; }}public class Main{ public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); Task task = new Task(); Future<Integer> result = executor.submit(task); executor.shutdown(); System.out.println("主线程在执行任务"); try { System.out.println("task运行结果" + result.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println("所有线程执行完毕"); }}

上述代码的执行结果为:

子线程在进行计算主线程在执行任务task运行结果4950所有线程执行完毕
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表