• 76060

    文章

  • 703

    评论

  • 18

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下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网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客