进程与线程 入门知识篇

前言

大家好啊,我是汤小圆。

今天给大家推荐的是,进程与线程的入门知识,希望对大家有帮助,谢谢。

简介

首先用术语来讲一下,进程是系统进行资源调度和分配的基本单元,线程是进程的最小执行单元;

比如Windows中的任务管理器,就可以看到正在运行的进程,如下所示


进程-win10.png

PS:这里要注意一点,程序不等于进程

程序是指令的集合,是静态的;进程是正在执行的程序,是活的

当你双击运行程序(.exe文件)时,程序的指令会加载到内存中,此时你就会得到这个程序的进程

好了,术语讲完了,接下来开始讲人话

知识点

1. 进程和线程的关系是怎么样的呢?

进程可以看作一个容器,线程就是容器内的最小执行单元;

我们用一个例子来说明,比如有一个宿舍(进程),宿舍里有两个人(线程),一个厕所(共享资源)

宿舍和人的关系就是进程和线程的关系

一个进程可以包含多个线程。

2. 既然有了进程,为啥还要有线程呢?

  1. 每个进程都有自己独立的数据空间,进程之间不共享这些数据资源,通讯不方便;

    但是线程不一样,一个进程内的多个线程共享这个进程的数据资源,通讯方便

  2. 多进程之间切换开销大;

    但是多线程不会,线程来回切换开销很小

    (这里简单解释下,引入一个虚拟空间的概念,多个进程拥有不同的虚拟空间和缓存,但是多个线程共享进程的虚拟空间和缓存,进程切换之后,缓存失效,要重新去寻址虚拟空间,但是线程因为共享空间,缓存还是可以用的,所以比进程快)

3. 多线程都有哪些好处呢?

多线程相互协作,重复利用系统资源,提高系统吞吐率

如果只是单个线程,那么程序在执行比较耗时的操作(比如IO)时,CPU 是处于空闲的状态,就会造成资源的浪费

但是多线程可以切换到其他线程,继续执行其他任务,从而充分利用CPU

比如我们在看电影的时候,眼睛在工作,耳朵也在工作,这样就可以充分利用我们的身体去享受电影;

但是如果眼睛和耳朵要分开工作,那就难受了(脑补一下声音画面不同步的场景)

4. 多线程要怎么确保数据安全呢?

有多种方式:

  1. 局部变量,即单个线程内定义的局部变量只有自己可见,那肯定是安全的

  2. 只读对象,即共享的对象是只读的,那肯定也是安全的

  3. 线程安全类,即类本身是线程安全的,那么基于这个类的操作肯定也是安全,比如StringBuffer类

  4. 同步与锁机制,即用户自己通过加锁,来确保数据安全;这个会导致程序变得复杂且容易出现问题

5. 线程的生命周期都有哪些呢?

通过JDK源码可以看到,线程的生命周期有6个状态,如下所示

public enum State {
 NEW, // 创建了线程,但是啥也没干
 RUNNABLE, // 启动了线程,处于运行状态
 BLOCKED, // 阻塞了线程,处于阻塞状态
 WAITING, // 等待状态,没有时间限制,直到有其他事件通知
 TIMED_WAITING, // 等待状态,有时间限制,时间到了,会返回到运行状态
 TERMINATED; // 终止状态,线程结束
 }

6. 这些状态之间的关系是咋样的呢?

可以用一张图来描述,如下所示,可以看到除了NEW状态和TERMINATED状态,其他状态都是跟RUNNABLE状态互通的

线程状态图.png

7. 那么线程的创建 New 有几种方式呢?

三种

  1. (不推荐)继承Thread类,但是这样的话不符合LSP原则(里氏替换原则,详细内容可参考:https://www.jianshu.com/p/cf9f3c7c0df5

  2. (推荐)实现Runnable接口,比第一种灵活,也更加安全

  3. (推荐)实现Callable接口,相比于第二种,多了返回值异常抛出

8. BLOCKED 状态一般什么情况下会出现呢?

遇到锁的情况下,如果锁没有释放,那么线程就会阻塞

9. WAITING 和 TIMED_WAITING有啥区别,不都是等待状态吗?

WAITING 状态会无休止的等待下去,直到其他事件通知它,它才会停止等待,进入RUNNABLE状态(被动)

TIMED_WAITING 状态会有一个等待最长时间,如果到了等待最长时间,还没有人通知它,它会自动停止等待,进入RUNNABLE状态(被动+主动)

总结

上面只是简单介绍了线程和进程,真正要学的话东西还是很多的

参考书籍

  1. Java并发编程实战

  2. 实战Java高并发程序设计(第二版)

参考链接

  1. 里氏替换原则:https://www.jianshu.com/p/cf9f3c7c0df5

后记

最后,感谢大家的观看,谢谢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容