进程与线程 - 入门篇 桃扇骨 2023-01-20 09:49 3阅读 0赞 ### 文章目录 ### * * * 简介 * 1. 进程和线程的关系是怎么样的呢? * 2.既然有了进程,为啥还要有线程呢? * 3. 多线程都有哪些好处呢? * 4. 多线程要怎么确保数据安全呢? * 5. 线程的生命周期都有哪些呢? * 6. 这些状态之间的关系是咋样的呢? * 7. 那么线程的创建 New 有几种方式呢? * 8. BLOCKED 状态一般什么情况下会出现呢? * 9. WAITING 和 TIMED\_WAITING有啥区别,不都是等待状态吗? * 总结 -------------------- ### 简介 ### > 首先用术语来讲一下,进程是系统进行资源调度和分配的基本单元,线程是进程的最小执行单元; > 比如Windows中的任务管理器,就可以看到正在运行的进程。 PS: * 这里要注意一点,程序不等于进程 * 程序是指令的集合,是静态的;进程是正在执行的程序,是活的 * 当你双击运行程序(.exe文件)时,程序的指令会加载到内存中,此时你就会得到这个程序的进程 > 好了,术语讲完了,接下来开始讲人话。 ### 1. 进程和线程的关系是怎么样的呢? ### 进程可以看作一个容器,线程就是容器内的最小执行单元; 我们用一个例子来说明,比如有一个宿舍(进程),宿舍里有两个人(线程),一个厕所(共享资源) 宿舍和人的关系就是进程和线程的关系 一个进程可以包含多个线程。 ### 2.既然有了进程,为啥还要有线程呢? ### 1. 每个进程都有自己独立的数据空间,进程之间不共享这些数据资源,通讯不方便; 但是线程不一样,一个进程内的多个线程共享这个进程的数据资源,通讯方便 2. 多进程之间切换开销大; 但是多线程不会,线程来回切换开销很小 (这里简单解释下,引入一个虚拟空间的概念,多个进程拥有不同的虚拟空间和缓存,但是多个线程共享进程的虚拟空间和缓存,进程切换之后,缓存失效,要重新去寻址虚拟空间,但是线程因为共享空间,缓存还是可以用的,所以比进程快) ### 3. 多线程都有哪些好处呢? ### 多线程相互协作,重复利用系统资源,提高系统吞吐率 如果只是单个线程,那么程序在执行比较耗时的操作(比如IO)时,CPU 是处于空闲的状态,就会造成资源的浪费 但是多线程可以切换到其他线程,继续执行其他任务,从而充分利用CPU 比如我们在看电影的时候,眼睛在工作,耳朵也在工作,这样就可以充分利用我们的身体去享受电影; 但是如果眼睛和耳朵要分开工作,那就难受了(脑补一下声音画面不同步的场景) ### 4. 多线程要怎么确保数据安全呢? ### 有多种方式: * 局部变量,即单个线程内定义的局部变量只有自己可见,那肯定是安全的 * 只读对象,即共享的对象是只读的,那肯定也是安全的 * 线程安全类,即类本身是线程安全的,那么基于这个类的操作肯定也是安全,比如StringBuffer类 * 同步与锁机制,即用户自己通过加锁,来确保数据安全;这个会导致程序变得复杂且容易出现问题 ### 5. 线程的生命周期都有哪些呢? ### 通过JDK源码可以看到,线程的生命周期有6个状态,如下所示 public enum State { NEW, // 创建了线程,但是啥也没干 RUNNABLE, // 启动了线程,处于运行状态 BLOCKED, // 阻塞了线程,处于阻塞状态 WAITING, // 等待状态,没有时间限制,直到有其他事件通知 TIMED_WAITING, // 等待状态,有时间限制,时间到了,会返回到运行状态 TERMINATED; // 终止状态,线程结束 } ### 6. 这些状态之间的关系是咋样的呢? ### 可以用一张图来描述,如下所示 ![线程状态图][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpX0ppYW5fSHVpXw_size_16_color_FFFFFF_t_70] ### 7. 那么线程的创建 New 有几种方式呢? ### **三种:** 1. (不推荐)继承Thread类,但是这样的话不符合LSP原则(里氏替换原则) 2. (推荐)实现Runnable接口,比第一种灵活,也更加安全 3. (推荐)实现Callable接口,相比于第二种,多了返回值和异常抛出 ### 8. BLOCKED 状态一般什么情况下会出现呢? ### 遇到锁的情况下,如果锁没有释放,那么线程就会阻塞 ### 9. WAITING 和 TIMED\_WAITING有啥区别,不都是等待状态吗? ### WAITING 状态会无休止的等待下去,直到其他事件通知它,它才会停止等待,进入RUNNABLE状态(被动) TIMED\_WAITING 状态会有一个等待最长时间,如果到了等待最长时间,还没有人通知它,它会自动停止等待,进入RUNNABLE状态(被动+主动) ### 总结 ### 上面只是简单介绍了线程和进程,真正要学的话东西还是很多的。 最后,感谢小伙伴们阅读,谢谢! [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpX0ppYW5fSHVpXw_size_16_color_FFFFFF_t_70]: /images/20221021/7ed5a952fd704678b2514862fdd7ae8b.png
相关 进程与线程 有那么一些零碎的小知识点,偶尔很迷惑,偶尔被忽略,偶然却发现它们很重要,也是各大笔试和面试高频出现考点。这段时间正好在温习这些,就整理在这里,一起学习一起提高!后面还会继续补充 痛定思痛。/ 2022年05月30日 00:19/ 0 赞/ 284 阅读
相关 进程与线程 [进程与线程][Link 1] 推荐一篇讲解的非常透彻且非常形象的文章,阮一峰的一篇博文。 原文链接:[进程与线程的一个简单解释][Link 2] posted @ 秒速五厘米/ 2022年03月22日 11:09/ 0 赞/ 282 阅读
相关 线程与进程 进程 1. 进程是资源分配的最小单位。 2. 开销: 有独立的代码和数据空间,程序切换开销大。 3. 坏境: 能同时运行多个进程(程序)。 4. 内存: 系统在运 骑猪看日落/ 2022年03月17日 10:14/ 0 赞/ 248 阅读
相关 进程与线程 进程,是一个活动的实体,我们平时所说的程序或者可执行文件并不是一个进程,他们都属于被动实体,只有将程序或者可执行文件调入到内存中才能成为一个活动实体,才能称之为进程。 进程是 小鱼儿/ 2022年01月16日 04:27/ 0 赞/ 293 阅读
相关 进程与线程 进程的定义 由于程序在并发执行时,各次执行的结果不同,所以用“程序”这个概念已无法描述程序的并发执行,所以必须引入新的概念 – 进程来描述程序的并发执行。 根据1978 比眉伴天荒/ 2022年01月15日 01:05/ 0 赞/ 304 阅读
相关 进程与线程 进程至少包含三个组成要素:程序快、代码块以及进程控制块; 进程是系统中资源分配和保护的基本单位; 线程作为CPU的调度和分派的基本单位; 每个进程在创建的时候,至少 Dear 丶/ 2022年01月11日 07:49/ 0 赞/ 326 阅读
相关 进程与线程 进程与线程: 基本概念: 进程:进程是正在运行的程序的实例。每个进程都有自己的地址空间,一般情况下,它包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区 落日映苍穹つ/ 2021年09月26日 13:08/ 0 赞/ 401 阅读
相关 进程与线程 进程与线程 1 进程 1.1 进程的概念 进程就是正在运行的程序,它代表了程序所占用的内存区域 1.2 进程的特点 独立性 进程是系 忘是亡心i/ 2021年09月07日 06:19/ 0 赞/ 611 阅读
还没有评论,来说两句吧...