一、与runnable接口对比

1 创建新类MyThread实现runnable接口2 class MyThread implementsRunnable{3 @Override4 public voidrun() {5

6 }7 }8 新类MyThread2实现callable接口9 class MyThread2 implements Callable{10 @Override11 public Integer call() throwsException {12 return 200;13 }14 }15 面试题:callable接口与runnable接口的区别?16

17 答:(1)是否有返回值18 (2)是否抛异常19 (3)落地方法不一样,一个是run,一个是call20

21

22

23

二、如何使用

不可行,因为:thread类的构造方法根本没有Callable

FutureTask ft = new FutureTask(new MyThread());

new Thread(ft, "AA").start();

运行成功后如何获得返回值?

ft.get();

三、FutureTask

是什么

未来的任务,用它就干一件事,异步调用

main方法就像一个冰糖葫芦,一个个方法由main串起来。

但解决不了一个问题:正常调用挂起堵塞问题

在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给Future对象在后台完成,

当主线程将来需要时,就可以通过Future对象获得后台作业的计算结果或者执行状态。

一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。

仅在计算完成时才能检索结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,

就不能再重新开始或取消计算。get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,

然后会返回结果或者抛出异常。

只计算一次

get方法放到最后

代码:

1 packagecom.study.callable;2

3

4 importjava.util.concurrent.Callable;5 importjava.util.concurrent.FutureTask;6 importjava.util.concurrent.TimeUnit;7

8 class MyThread implementsRunnable {9 @Override10 public voidrun() {11 }12 }13

14 class MyThread2 implements Callable{15 @Override16 public Integer call() throwsException {17 System.out.println(Thread.currentThread().getName() + " come in callable");18 return 200;19 }20 }21

22 public classCallableDemo {23 public static void main(String[] args) throwsException {24 //FutureTask futureTask = new FutureTask<>(new MyThread2());25 //new Thread(futureTask,"zhang3").start();//传入futureTask对象26 //System.out.println(futureTask.get());27 //28 FutureTask ft1 = new FutureTask(() ->{29 System.out.println(Thread.currentThread().getName() + " come in callable");30 TimeUnit.SECONDS.sleep(4);31 return 1024;32 });33 FutureTask ft2 = new FutureTask(() ->{34 System.out.println(Thread.currentThread().getName() + " come in callable");35 TimeUnit.SECONDS.sleep(4);36 return 2048;37 });38 //启动线程

39 new Thread(ft1, "zhang3").start();40 new Thread(ft2, "li4").start();41

42 System.out.println(ft1.get());43 System.out.println(ft2.get());44

45 /**

46 *47 *48 在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给Future对象在后台完成,49 当主线程将来需要时,就可以通过Future对象获得后台作业的计算结果或者执行状态。50

51 一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。52

53 仅在计算完成时才能检索结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,54 就不能再重新开始或取消计算。get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,55 然后会返回结果或者抛出异常。56

57 只计算一次58 get方法放到最后59 */

60 }61 }

java callable 详解_Java多线程详解(七)------Callable接口介绍相关推荐

  1. java合法的数组声明_Java数组详解

    Java数组详解 数组详解 1.数组概述 数组是相同类型数据的有序集合 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们 2.数组声明和创建 ①数组声明形式 dataType[] a ...

  2. java注解详解_Java注解详解

    Annotation是从JDK5.0开始引入的新技术. Annotation的作用:–不是程序本身,可以对程序作出解释.(这一点,跟注释没什么区别)–可以被其他程序(比如:编译器等)读取.(注解信息处 ...

  3. java线程代码实现_Java 多线程代码实现讲解

    作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...

  4. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题

    一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...

  5. java线程下载文件_Java多线程下载文件实例详解

    本文实例为大家分享了Java多线程下载文件的具体代码,供大家参考,具体内容如下 import java.io.File; import java.io.InputStream; import java ...

  6. java模拟交通信号灯_java 多线程交通信号灯模拟过程详解

    这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...

  7. java list取值_Java集合详解

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

  8. java模型给泛型_java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

    对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应 ...

  9. java 枚举使用例子_Java枚举详解及使用实例(涵盖了所有典型用法)

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...

最新文章

  1. ORACLE1.22 %type %rowtype
  2. linux下汇编实例
  3. OpenCV | Laplacian算子的使用
  4. 为什么银行没有厕所?内急了怎么办!
  5. 第1章 数据分析概述
  6. P4309-[TJOI2013]最长上升子序列【Splay】
  7. wireshark抓包工具的使用及分析
  8. SpringBoot-探索回顾Spring框架本质
  9. Linux防火墙iptables的策略
  10. oracle数据库dca,有关Oracle数据库
  11. ssis高级转换任务—查找_SSIS中的模糊查找转换
  12. Python+OpenCV:Optical Flow(光流)
  13. 三星智能电视将用户语音隐私泄露给第三方?
  14. 鸿蒙系统是华容网格吗,鸿蒙上手机还在迟疑,国内对手却已悄然来到
  15. 专访 | 阿里前辈李智慧:如何培养架构思维,我把20年的架构经讲给你听
  16. 愚公移山第一章伪代码
  17. matlab查表svpwm,SVPWM的MATLAB仿真实现
  18. 浏览器的使用方法,如何添加书签|常用网站|扩展程序?
  19. vue+qrcode批量生成二维码
  20. 织梦dedecms蓝色商务学院职业技术学校网站模板

热门文章

  1. [做题记录]AtCoder AGC做题记录
  2. STL源码剖析(四)
  3. 在下载jar包时,要有三个包,分别为使用的把class、查看文档的api、查看源代码的资源包...
  4. js父页面和子页面之间传值
  5. 3.15计算机网络原理与技术笔记
  6. Cesium原理篇:7最长的一帧之Entity(上)
  7. 算法笔记_001:斐波那契数的多种解法(Java)
  8. [资料]pthreads PHP
  9. 网络字节与主机字节转换 htons(), ntohl(), ntohs(),htons() 函数
  10. newcoder Tachibana Kanade Loves Probability(小数点后第k位)题解