一、步骤

1、定义一个线程任务类实现Callable接口,声明线程执行的结果类型。
2、重写线程任务类的call()方法,这个方法可以直接返回执行的结果。
3、创建一个Callable的线程任务对象。
4、把Callable的线程任务对象包装成一个未来任务对象。
5、把未来任务对象包装成线程对象。
6、调用线程start()方法,启动线程。
7、获取线程执行结果。

二、代码

package com.zjl.study.多线程;import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;/*** Created by zjl 2022/5/28**/
public class 创建线程方式3 {public static void main(String[] args) {// 3、创建一个Callable的线程任务对象。MyCallable myCallable = new MyCallable();// 4、把Callable的线程任务对象包装成一个未来任务对象。FutureTask<String> futureTask = new FutureTask<>(myCallable);// 5、把未来任务对象包装成线程对象。Thread thread = new Thread(futureTask);// 6、调用线程start()方法,启动线程。thread.start();// 7、获取线程执行结果。如果此时获取结果的任务还未执行完成,会让出CPU,直至任务执行完成才获取结果。try {String s = futureTask.get();System.out.println(s);} catch (Exception e) {e.printStackTrace();}}}// 1、定义一个线程任务类实现Callable接口,声明线程执行的结果类型。
class MyCallable implements Callable<String> {// 2、重写线程任务类的call()方法,这个方法可以直接返回执行的结果。@Overridepublic String call() throws Exception {return "子线程任务执行,线程名称为:" + Thread.currentThread().getName();}
}

三、运行结果

四、优缺点

1、缺点

  • 代码复杂

2、优点

  • 线程任务只是实现了Callable接口,可以继续继承其他类,而且可以继续实现其他接口。
  • 同一个线程任务对象可以被包装成多个线程对象。
  • 适合多个线程去共享同一个资源。
  • 实现解耦操作,线程任务代码可以被多个线程共享,线程任务代码和线程独立。
  • 线程池可以放入Runnable接口和Callable接口。
  • 可以得到线程执行结果。

3、创建线程方式三:实现Callable接口相关推荐

  1. 三种创建线程方式之Callable接口

    一.类继承关系及API解析 Callable接口 @FunctionalInterface public interface Callable<V> {V call() throws Ex ...

  2. 创建线程的第三种方式:实现Callable接口(含部分源码解析)

    创建线程的第三种方式--实现Callable接口 package com.lqy.Multithreading; import java.util.concurrent.Callable; impor ...

  3. 线程创建方式3-实现 callable接口(Java)

    线程创建方式3-实现 callable接口(Java) 线程创建方式三:实现 callable接口 callable的好处: 1.可以定返回值 2.可以抛出异常 package src.Demo02; ...

  4. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  5. Java 创建线程的三种方式

    一.继承Thread类创建 1.定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体: 2.创建该类的实例对 ...

  6. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  7. 创建线程的三种方式、线程运行原理、常见方法、线程状态

    文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...

  8. 一、创建线程的三种方式

    一.创建线程 开启一个线程的方法: 继承 Threrad 重写 run方法,调用 start 开启线程 实现 Runnable 接口实现 run方法,创建 Thread 时作为参数传递并调用 star ...

  9. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

最新文章

  1. satd残差_RDO、SAD、SATD、λ(转贴) - [h.264]
  2. teechart属性和方法
  3. [杂记]对RSA算法的数学原理的一点思考
  4. 当随机不够随机:一个在线扑克游戏的教训
  5. .NET Core 调用百度 PaddleOCR 识别图文
  6. 使用系统规则测试System.in和System.out
  7. duration java_Java Duration类| minusMillis()方法与示例
  8. element 保存 点击链接_保存微信表情!
  9. Java随机生成_0--2π_使用随机数计算PI
  10. ElasticSearch的优点
  11. Xcode和macOS对应关系查询网址
  12. Linux中ssh远程登录服务、SSH免密登录
  13. c语言程序设计职工信息管理系统,C语言程序设计-职工信息管理系统.doc
  14. PuTTYgen 使用
  15. 购物中心弱电智能化系统工程施工方案
  16. Maxcompute修改列名
  17. 自己写了一个小小的双色球号码随机生成器
  18. 简单点击图片弹出video视频弹窗功能
  19. [译]eBay Elasticsearch性能调优实践
  20. Android编程权威指南[pdf]

热门文章

  1. 工地必备!住建部《施工现场新冠肺炎疫情常态化防控工作指南》
  2. druid监控无法关闭
  3. python中可选参数_正确使用Python可选参数
  4. js获取class下的img
  5. 智能秤四/八电极测脂模块,实现人体脂肪成分计量
  6. vue学习笔记-接口调用fetch用法
  7. Apollo GraphQL
  8. 2019-8-19 [Linux] 3.为什么要修改静态IP IP的获取有几种方式 设置静态IP后无法Ping百度怎么办 可以ping后CRT无法连接怎么办
  9. Nodejs Day07 登录+路由
  10. C语言基础知识:字符串赋值