当前位置: 首页 > news >正文

关于《Java并发编程之线程池十八问》的补充内容

一、写在开头

在上一篇文章我们写《Java并发编程之线程池十八问》的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充。

二、Runnable vs Callable

在创建线程的时候,一般会选用 RunnableCallable 两种方式。

【源码对比】

Runnable接口

@FunctionalInterface
public interface Runnable {/*** 被线程执行,没有返回值也无法抛出异常*/public abstract void run();
}

Callable接口

@FunctionalInterface
public interface Callable<V> {/*** 计算结果,或在无法这样做时抛出异常。* @return 计算得出的结果* @throws 如果无法计算结果,则抛出异常*/V call() throws Exception;
}
  1. Runnable自 Java 1.0 以来一直存在,Callable在 Java 1.5 时引入;
  2. Runnable 接口不会返回结果或抛出检查异常,Callable 接口可以;
  3. Callable支持泛型,可定义返回值类型,但一般情况下没有返回值时,我们推荐使用Runnable接口,使得代码更简洁!
  4. 工具类 Executors 可以实现将 Runnable 对象转换成 Callable 对象。(Executors.callable(Runnable task) 或 Executors.callable(Runnable task, Object result))。

三、execute() vs submit()

在线程池中我们有两种提交任务的方式,分别是 execute()submit(),虽然我们在上一篇文章中都有用到,但是并没对它们的特点进行总结,这里做一个对比:

  1. execute()方法用于提交不需要返回值的任务ÿ
http://www.lryc.cn/news/357969.html

相关文章:

  • 扒出秦L三个槽点,我不考虑买它了
  • 【408真题】2009-28
  • LeetCode---链表
  • idea 快捷键运用
  • k8s问题
  • 串口通信问题排查总结
  • 【教学类-59-】专注力视觉训练01(圆点百数图)
  • C 语言实例 - 循环输出26个字母
  • qt多语言翻译不生效的原因
  • springboot集成达梦数据库8,用springboot+mtbatisplus查询值为空
  • C语言-----指针数组 \ 数组指针
  • Go语言 gRPC 简述
  • 信息系统项目管理师0136:工具与技术(8项目整合管理—8.9结束项目或阶段—8.9.2工具与技术)
  • appium-driver方法待整理。。
  • Android Ktor 网络请求框架
  • 交互设计如何助力传统技艺在当代复兴?
  • 使用 Django Rest Framework 构建强大的 Web API
  • 老师如何对付挑事儿的家长?
  • 若安装了Python3且没有删除Python2,那么启动yum命令会报错:
  • JVM(四)
  • Leetcode373.查找和最小的 K 对数字
  • windows 安装 使用 nginx
  • 【运维】Linux 端口管理实用指南,扫描端口占用
  • Android笔记--应用安装
  • 今日分享站
  • 基于python flask的旅游数据大屏实现,有爬虫有数据库
  • 海尔智家牵手罗兰-加洛斯,看全球创牌再升级
  • 【busybox记录】【shell指令】unlink
  • 如何恢复被盗的加密货币?
  • 英语学习笔记29——Come in, Amy!