1.Callable VS Runnable

  • Callable和Runnbale一样代表着是线程任务,区别在于Callable有返回值并且可以抛出异常。

2.创建并启动有返回值的线程的步骤

  • 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且该call()方法有返回值。
  • 将Callable实例传入FutureTask类。
  • 使用FutureTask对象作为Thread对象的target创建并启动新线程。
  • 调用FutureTask对象的get()方法来获得子线程结束后的返回值。

3.示例代码:

  • MyCallable类:
public class MyCallable implements Callable<Integer>{public Integer call() throws Exception {  int sum = 0;for (int i = 0; i < 100; i++) {      System.out.println(Thread.currentThread().getName()+"--->"+i);sum ++;}     return sum;}
}
  • main类
public class Main {public static void main(String[] args) throws Exception {System.out.println("----------Callable测试-----------------");Callable<Integer> myCallable = new MyCallable();FutureTask<Integer> future = new FutureTask<Integer>(myCallable);Thread thread = new Thread(future);thread.start();try {int sum = future.get();System.out.println("funture计算完成:"+sum);} catch (Exception e) {  e.printStackTrace();}
}
  • 启动后我们可以看到主线程定义的sum变量成功取到MyCallable实例计算得到的sum值。

4.扩展

在Future接口里定义如下几个公共方法来控制它关联的Callable任务

试图取消该Future里关联的Callable任务
boolean cancel(boolean mayInterruptIfRunning)
返回Callable任务里call()方法的返回值。调用该方法将导致程序阻塞,必须等到子线程结束才会得到返回值
V get()
返回Callable任务里call()方法的返回值,该方法让程序最多阻塞timeout长的时间,unit为时间单位,如果经过指定时间后Callable任务依然没有返回值,将会抛出TimeoutException异常
V get(long timeout,TimeUnit unit)
如果此Callable任务正常完成前被取消,则返回true
boolean isCancelled()
如果Callable任务已经完成,则返回true
boolean isDone()

原文链接:https://blog.csdn.net/m0_38075425/article/details/81606393

java多线程之Callable接口相关推荐

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

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

  2. Java多线程之Callable、Future和FutureTask

    Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...

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

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

  4. Java多线程之Lock接口

    为什么80%的码农都做不了架构师?>>>    Lock接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多 ...

  5. Java多线程之8Lock问题解析

    Java多线程之8Lock问题解析 本文目录 1. 8Lock实例: 标准访问的时候,请问先打印邮件还是短信? sendEmail方法暂停4秒钟,请问先打印邮件还是短信? 新增Hello普通方法,请问 ...

  6. Java多线程之Runable与Thread

    Java多线程是Java开发中的基础内容,但是涉及到高并发就有很深的研究可做了. 最近看了下<Java并发实战>,发先有些地方,虽然可以理解,但是自己在应用中很难下手. 所以还是先回顾一下 ...

  7. 多线程之callable详解

    多线程之callable详解 面试有人会问:线程的实现方式有几种? 很多人可能回答:2种,继承Thread类,实现Runnable接口. 很多忽略了callable这种方式. 也许有人知道callab ...

  8. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  9. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

最新文章

  1. sqlserver中删除重复行的方法
  2. Docker / 深入理解的容器和镜像
  3. Laravel核心解读--完结篇 1
  4. python下载官网-Python2.7.10
  5. 视频帧率对人眼主观感受的影响 2
  6. 项目管理实例—— 点评
  7. 怎么判断子元素距离父元素顶部位置_css子元素如何相对父元素定位?
  8. 利用Linux系统实现VLAN间的单臂路由及安全网关的功能
  9. csr蓝牙驱动Linux,csr harmony蓝牙适配器驱动
  10. LAGON ATOLL
  11. 信噪比与雷达探测距离之间关系
  12. android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
  13. Junit4 initializationError初始化错误 终于解决了!!!
  14. [CTF]天下武功唯快不破
  15. 求丑数(判断一个整数是否是丑数)
  16. Single Image Dehazing via Multi-Scale Convolutional Neural Networks
  17. 9.绘制统计图形——饼图
  18. HTML-6.表单学习—如何做一个注册(登录)网页
  19. python情感分析(真实案例完整流程)
  20. 100.[leetcode]same-tree

热门文章

  1. java 的访问修饰符
  2. 创建类的三个步骤_如何通过5个简单的步骤创建企业网站
  3. Python中strip函数几种用法
  4. 计算机中的英语六级作文万能模板,大学英语六级作文万能模板7篇
  5. fftshift小技巧
  6. 单电源运放和双电源运放有什么区别?
  7. 运维监控系列(15)-Alertmanager添加163邮箱、钉钉、微信告警通知功能
  8. 视频号该如何涨粉引流,分享10种涨粉技巧+5种引流方法丨国仁网络
  9. 百度CEO李彦宏:百度将来会进行专门投资
  10. 咕咚vs悦跑圈的竞品分析