ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12 多线程

2021-07-04 01:03:22  阅读:215  来源: 互联网

标签:12 thread -- object lockSupport running 线程 多线程


进程和线程
各进程是独立的,而各线程则不一定,同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。

为什么要用多线程
单核时代,为了提高cpu和io设备的综合利用率,一个线程执行cpu计算时,另一个线程进行io操作。
多核时代,为了提高cpu利用率,使多个核心都被使用到。

线程的生命周期和状态
new 初始状态
new-(Thread.start())->runnable

runnable 运行状态(包含running运行中 和 ready就绪)
running -(yield()、系统调度)->ready
ready -(系统调度获得时间片)->running

blocked 阻塞状态
running --(等待进入synchronized方法或synchronized块)--> blocked
blocked --(获取到锁)--> running

waiting 等待状态 表示当前线程需要其他线程做出动作(通知或中断)
running --(object.wait(),thread.join(),lockSupport.park())-->waiting
waiting --(object.notify(),object.notifyAll(),lockSupport.unpark(thread))-->running

time_waiting 超时等待 表示当前线程超过一段时间自动返回running状态
running --(object.wait(long),thread.join(long),lockSupport.parkNanos(),lockSupport.parkUntil(),thread.sleep(long))-->time_waiting
time_waiting--(object.notify(),object.notifyAll(),lockSupport.unpark(thread))-->running

terminated 终止状态
running --(执行完成)-->terminated
\"image.png\"

上下文切换
一个线程的时间片用完,就会回到就绪状态,切换成其他线程。
任务从保存到再加载就叫上下文切换。
消耗大量cpu时间。

标签:12,thread,--,object,lockSupport,running,线程,多线程
来源: https://www.cnblogs.com/majava/p/14968077.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有