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

985研一学习日记 - 2024.11.23

一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。

日常

1、起床6:20

2、健身1h

3、LeetCode刷了1题

4、复盘22:00

不复盘等于白学!!!


学习和感想

JUC并发编程

  1. Callable接口
    1. 是什么
      1. 创建线程的方法:一种是通过继承Thread类创建,另一种是通过使用Runnable创建线程
      2. 但是Runnable缺少一项功能,当线程终止时(run()结束时),无法使线程返回结果
      3. 为了使得线程结束后能够返回结果,Java提供了Callable接口
      4. 通过Callable接口来创建线程可以有返回值Callable接口创建线程可以有返回值
      5. Callable接口有返回值,Runnable接口没有返回值
      6. Callable接口会抛出异常,Runnable接口不会抛出异常
      7. Callable接口使用call()创建线程并返回结果Runnable接口使用run()实现创建线程
    2. Callable创建线程
      1. 实现Callable接口,重写内部的 call() 方法,会返回结果
      2. Runnable接口创建线程是将一个Runnable接口的实现类对象作为参数传入到Thread来创建线程
      3. 但Callable接口和Runnable接口创建线程的形式不一样,此时应该找一个类,既和Runnable有关系,又和Callable有关系
      4. 此时可以通过Runnable接口的FutureTask实现类来根据Callable接口创建线程
      5. 使用Callable接口创建的线程可以获得结果
      6. Callable接口不可以直接替代Runnable接口作为参数传入Thread,此时需要找FutureTask实现类(Runnable接口实现类)作为中介传入Callable接口实现类来创建线程
    3. FutureTask实现类
      1. FutureTask类是Runnable接口的实现类,在创建时可以传入Callable接口的实现类
      2. 创建FutureTask类时可以传入Callable接口实现类,此时通过call()方法来执行线程的操作并返回结果
      3. 可以直接使用lambda表达式来声明函数式接口,故FutureTask类可以获得线程返回的结果
      4. FutureTask原理
        1. 开启一个线程去完成某个任务,然后可以获得任务结果
        2. 可以通过Callable接口实现类来创建FutureTask对象
        3. 使用FutureTask单开一个线程执行某些操作,然后主线程继续执行,过一段时间后获得FutureTask线程的结果
        4. FutureTask只需要汇总一次,即只需要获得一次结果就可以
      5. FutureTask创建线程
        1. 传入Callable接口的实现类,或者使用lambda表达式来创建FutureTask对象
        2. 此时创建线程后就会执行重写的call()函数中的操作,并可以通过FutureTask对象来获得函数执行的结果
        3. 先传入Callable接口实现类(可以lambda表达式)来创建一个FutureTask对象,然后再创建线程Thread时传入创建的FutureTask对象,此时创建的线程就会执行call()中的操作,然后通过FutureTask对象获得结果
        4. 使用FutureTask时只会执行一次call()中的操作,第二次获得结果时就直接返回,不会再执行线程

http://www.kler.cn/a/413106.html

相关文章:

  • Python网络爬虫基础
  • v-for产生 You may have an infinite update loop in a component render function
  • 用Java爬虫“搜刮”工厂数据:一场数据的寻宝之旅
  • 网站服务器该如何防御CC攻击?
  • 如何选择最适合企业的ETL解决方案?
  • Redis设计与实现 学习笔记 第二十章 Lua脚本
  • pytest之收集用例规则与运行指定用例
  • nn.Upsample
  • linuxCNC(三)ini配置文件说明
  • 解决 S3 文件复制时的 “can‘t start new thread“ 错误
  • CListCtrl::InsertItem和临界区导致程序卡死
  • C++-qt经验
  • Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来
  • Unity 中 多种资源加载方式的优缺点
  • MySQL(8)【聚合函数 | group by分组查询】
  • 衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录
  • Scala中字符串
  • 选修课(Java Python JS C++ C )
  • 【汇编语言】call 和 ret 指令(一) —— 探讨汇编中的ret和retf指令以及call指令及其多种转移方式
  • 搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)
  • 【从零开始的LeetCode-算法】3206. 交替组 I
  • 《Opencv》基础操作<1>
  • 天通物联网应用:首创渐进式图片压缩算法,实现1000倍高效图传,可一键拨打天通电话
  • C#开发合集
  • CentOS8.5.2111(8)LAMP部署综合实验
  • Linux之网络基础