• 112786

    文章

  • 803

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

实现线程的第三种方式——Callable & Future

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

Callable

Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个方法 call.

public interface Callable<V> {
    V call() throws Exception;
}
  • 类型参数是返回值的类型。 例如, Callable< Integer> 表示一个最终返回 Integer 对象的异 步计算。

Future

Future 保存异步计算的结果。 可以启动一个计算, 将 Future 对象交给某个线程, 然后忘 掉它。Future 对象的所有者在结果计算好之后就可以获得它。

public interface Future<V> {
// 取消一个任务
    boolean cancel(boolean mayInterruptIfRunning);
// 任务是为被取消
    boolean isCancelled();
// 计算是否完成
    boolean isDone();
// 阻塞调用,直到计算完成
    V get() throws InterruptedException, ExecutionException;
// 计算超时,抛出异常
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

FutureTask

FutureTask 包装器是一种非常便利的机制, 可将 Callable 转换成 Future 和 Runnable, 它 同时实现二者的接口。

Callable<Integer> nyComputation = . . .;
FutureTask<Integer> task = new FutureTask<Integer>(myConiputation); 
Thread t = new Thread(task); // it's a Runnable
t.startO;
Integer result = task.getO;  // 阻塞

695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客