自学内容网 自学内容网

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()中的操作,第二次获得结果时就直接返回,不会再执行线程

原文地址:https://blog.csdn.net/LiuYQi/article/details/144002421

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!