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

面试-java多线程与并发

1.如何实现处理线程的返回值
(1)主线程等待法
主线程等待法:程序执行时,没有等到value值赋予完成,就直接在主函数
中执行打印value的值。
缺点:需要自己去实现循环等待的逻辑。若需要等待的变量变多,需要等待的时间可能很久。无法精准控制。
代码实现:
在这里插入图片描述
(2)方法二
使用Thread的join()阻塞当前线程以等待子线程处理完毕。(这里会阻塞主线程)
精准控制,实现简单。缺点:力度不够细
在这里插入图片描述
(3)方法三
通过Callable接口实现:通过FutureTask 或者 线程池获取
线程池:好处:提交多个实现Callable的方法类,去让线程池并发的处理结果。方便我们对callable相关的类进行统一的管理。
Futuretask的task.get()会等待mycallable有返回值才会去返回的!
在这里插入图片描述
线程池实现:
在这里插入图片描述
代码思想:往线程池里提交任务,通过idDone判断是否完成,通过future.get去等待直到获取到我们获取到value的值。

3.线程状态
六个状态:
在这里插入图片描述
以上两种方式会是线程进入无限期等待。
Runing状态的线程位于可运行线程之中,等待被线程调度选中获取CPU使用权。
Ready状态的线程位于线程池中,等待被线程调度选中,获取cpu的使用权。获取cpu时间片后,就变成Runing状态的线程。
限期等待:在这里插入图片描述
在这里插入图片描述
当线程的run方法完成时,或者主线程的main方法完成时,我们认为线程是终止了。线程对象也许是活的,但是它已经不是一个单独执行的线程。线程一旦终止了就不能再复生。在一个终止的线程上调用start方法会抛出IllegalThreadStateException错误。

在这里插入图片描述

http://www.lryc.cn/news/382960.html

相关文章:

  • 前端学习-day10
  • 深入理解桥接模式(Bridge Pattern)及其实际应用
  • Springboot + Mybatis 实现sql打印
  • Cesium默认bing地图数据,还支持哪些地图的数据源呢?
  • 高效、智能、安全:小型机房EasyCVR+AI视频综合监控解决方案
  • 数据分析的Excel基础操作
  • 【C语言】解决C语言报错:Invalid Pointer
  • 动态图形设计:创造视觉运动的艺术
  • CSS 属性 `mix-blend-mode`
  • 三大交易所全面恢复 IPO 申请
  • VC++开发积累——vc++6.0中删除函数的方法,右键,Delete
  • HBDNY-40/1端子排电压继电器 DC110V 导轨安装 约瑟JOSEF
  • Redis-数据类型-Geospatial(地理空间索引)
  • Python联动Mysql
  • vue3-openlayers 轨迹回放(历史轨迹)(ol-animation-path实现)
  • 计算机视觉全系列实战教程 (十二):图像分割(阈值分割threshold、分水岭算法watershed的使用步骤、洪水填充floodFill算法的使用)
  • Linux的免交互
  • 查看es p12证书文件过期方法
  • 1.8 无符号大数加、减运算
  • Java常用类--包装类
  • SpringMvcの拦截器全局异常处理
  • JVM虚拟机的组成
  • 探索CSS clip-path: polygon():塑造元素的无限可能
  • 【华为OD机试B卷】单词接龙(C++/Java/Python)
  • 项目实训-vue(十七)
  • Android10 SystemUI系列 需求定制(二)隐藏状态栏通知图标,锁屏通知,可定制包名,渠道等
  • Linux:RAID磁盘阵列
  • MongoDB和AI 赋能行业应用:零售
  • MQ~消息队列能力、AMQP协议、现有选择(Kafka、RabbitMQ、RocketMQ 、Pulsar)
  • 开源网安参与编制的《代码大模型安全风险防范能力要求及评估方法》正式发布