Runnable是执行工作的独立任务,但是它不返回任何值。在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表的是从方法call()中返回的值,并且必须使用ExecutorServices.submit()方法调用它,下面是一个简单示例。

package com.test;import java.util.ArrayList;
import java.util.List;
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;public class CallableTest {public static void main(String[] args) {ExecutorService exec=Executors.newCachedThreadPool();List<Future<String>> results=new ArrayList<Future<String>>();for(int i=0;i<5;i++) {results.add(exec.submit(new TaskWithResult(i)));}for(Future<String> fs :results) {try {System.out.println(fs.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}}
}class TaskWithResult implements Callable<String> {private int id;public TaskWithResult(int id) {this.id=id;}@Overridepublic String call() throws Exception {return "result of TaskWithResult "+id;}
}

实验结果:

result of TaskWithResult 0
result of TaskWithResult 1
result of TaskWithResult 2
result of TaskWithResult 3
result of TaskWithResult 4

submit()方法回产生Future对象,它用Callable返回结果的特定类型进行了参数化。可以用isDone()方法来查询Future是否已经完成,当任务完成时,它具有一个结果,可以调用get()方法获取该结果。也可以不用isDone()进行检查就直接调用get(),在这种情况下,get()将阻塞,直至结果准备就绪。还可以在试图调用get()来获取结果之前,先调用具有超时的get(),或者调用isDone()来查看任务是否完成。

Java Callable接口应用举例相关推荐

  1. java callable 详解_详解Java Callable接口实现多线程的方式

    在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...

  2. java callable接口_Java多线程之Callable接口的实现有返回值的线程

    import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util. ...

  3. java callable接口_Java Callable接口

    一 理论 Runnable是执行工作的独立任务,但是不返回任何值.如果我们希望任务完成之后有返回值,可以实现Callable接口.在JavaSE5中引入的Callable是一个具有类型参数的范型,他的 ...

  4. java callable接口_Java Callable接口实现细节详解

    代码如下 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import ja ...

  5. java callable接口_使用Callable接口实现线程

    执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果 package com.gwolf; import java.util.concurrent.Callable; im ...

  6. java.util.concurrent.Callable 接口 源码

    2019独角兽企业重金招聘Python工程师标准>>> 线程池相关 源码: package java.util.concurrent;@FunctionalInterface pub ...

  7. Java多线程之Callable接口的实现

    import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.ut ...

  8. java多线程 -- 创建线程的第三者方式 实现Callable接口

    Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口 Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一 ...

  9. 【Java】线程创建方式:Callable接口 / 使用线程池

    面试题:创建多线程有有哪几种方式? 回答:4种. 实现Runnable接口(重写Run方法) 继承Thread类 实现Callable接口(重写Call方法,与Run不同的是,Call方法有返回值) ...

最新文章

  1. Android Studio 使用Lambda
  2. 结婚戒指为什么戴在无名指上的原因
  3. 机器学习之乳腺癌问题(SVM)
  4. P3321-Apple Tree【树状数组】
  5. linux 中阻塞与非阻塞 同步与异步
  6. android tcp 最优窗口,Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)...
  7. python中提取几列_自己录制的公开课视频中提取字幕(python+opencv+Tesseract-OCR)
  8. 200支高校无人车赛队,华科为什么能赢?
  9. element-ui源码阅读笔记(button篇)
  10. Linux下编程获取本地IP地址的常见方法
  11. 北美电影票房Top10-2019年12月27日:《小妇人》表现亮眼
  12. Spring定时器的配置
  13. 基础算法练习200题07、编框
  14. Stacked Hourglass Networks 理解
  15. NOIP2011 洛谷 P1315 观光公交
  16. reset.css(常用项目代码初始化)
  17. UE4 解决半透明材质显示错误
  18. asp在线音乐系统音乐网站 音乐盒
  19. 头指针,头结点,首元结点的区别,头结点的优点
  20. 《如何有效阅读一本书》书评

热门文章

  1. Yolov5部署训练及代码解读
  2. 网站优化怎么挖掘长尾关键词?
  3. HDU 1493(QQpet exploratory park)
  4. 揭秘蓝牙定位技术,实现精准室内导航
  5. short与int型在内存中的存储形式
  6. 使用 MoveIt 控制自己的真实机械臂【3】——优化轨迹发给真实机械臂执行
  7. STM32入门篇2之外部中断
  8. 手机上的web页面的倒计时在手机锁屏后再解锁后发现倒计时不准
  9. Remoting学习
  10. 第48篇 接收蓝牙数据及PHP研究 Saturday