1 程序、进程、线程之间的区别与联系

三者之间的形象化理解:
* 程序:代码实现了功能,就是程序,是静态的;
* 进程:执行中的程序就是进程,是动态的;
* 线程:进程内的一个执行单元,也是进程内的可调度实体,可以并发执行提高了进程的效率。

进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

线程与进程的区别:
(1) 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 。
(2) 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 。
(3) 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
(4) 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

程序与进程的区别:
程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。

进程更能真实地描述并发,而程序不能;进程是由程序和数据两部分组成的。进程具有创建其他进程的功能,而程序没有。

同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。

2 Java的线程状态和生命周期

新建状态:
使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。

就绪状态:
当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。

运行状态:
如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态:
如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种:

  1. 等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。
  2. 同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。
  3. 其他阻塞:通过调用线程的 sleep() 或join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O处理完毕,线程重新转入就绪状态。

死亡状态:
一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。

同个人博客:https://www.serendipper-x.cn/

线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期相关推荐

  1. CPU核心数线程数、程序进程线程、并发并行的简单理解

    CPU核心数线程数.程序进程线程.并发并行.简单理解和区分 这篇文章是对上述感念的简单理解,想深入研究可以看看<计算机组成原理> CPU的核心数 线程数 当我们买电脑的时候,会看到CPU的 ...

  2. 一张图弄懂java线程的状态和生命周期

    转载自 一张图弄懂java线程的状态和生命周期 上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程. 这些状态的枚举值都定义在java.lang.Thread.State下 ...

  3. [转]Java 对象锁-synchronized()与线程的状态与生命周期

    线程的状态与生命周期 Java 对象锁-synchronized() ? 1 2 3 4 synchronized(someObject){ //对象锁 } 对象锁的使用说明: 1.对象锁的返还. 当 ...

  4. linux+kill+进程和线程,什么是程序,进程和线程?三者之间有何关系?

    进程 进程与线程的历史 进程与线程之间的关系 重点 进程 和 线程的概念 进程和程序关系 cpu在执行程序时什么叫进程 swap 内存的缺页异常 大的异常 小的异常 内存映射mmap 内存泄露 tas ...

  5. CPU核心数线程数、程序进程线程、并发并行

    核心数(物理概念) 8核:有8个相对独立的CPU核心单元组,这是物理概念,也就是说1个CPU有 8个独立的小CPU,物理上只能同时处理8个任务,也就是物理上是8核8线程. 线程数(逻辑概念) 既然物理 ...

  6. java守护锁_Java 对象锁-synchronized()与线程的状态与生命周期与守护进程

    synchronized(someObject){ //对象锁 } 一.对象锁 someObject 的使用说明: 1.对象锁的返还. 当synchronize()语句执行完成. 当synchroni ...

  7. linux-进程的理解-进程的状态与生命周期

    程序与进程 程序是静态的代码文件 进程是运行起来的程序 生命周期 进程状态

  8. 页面之间的跳转方式和参数传递以及路由和生命周期

    微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能.今天我们来研究小程序页面之间的跳转方式. 1.概述 在Andr ...

  9. h5端登录是什么意思_关于app、小程序和h5之间的区别

    1.APP 运行环境--Android和IOS手机操作系统 系统权限-- 最多最全面,但有些属于隐私需要用户授权才能调用. (安卓与IOS也有许多差异:Android类似于Windows,App几乎可 ...

最新文章

  1. Centos6上安装cobbler及cobbler常见参数详解
  2. php计算器使用方法,php--计算器的算法实现(-)
  3. C语言 程序代码编写规范
  4. 详解:设计模式之-适配器模式
  5. 一篇搞懂HTTP协议
  6. python的编程环境都不会搭建_9102年你还不会搭建Python环境
  7. js 一个对象的属性名是一个变量如何设置和获取值
  8. (转)MTK_面试的几个主要问题 必看
  9. java转安卓快吗_安卓开发者要从Java转到Kotlin吗?谷歌说后者支持更多
  10. ROS安装时rosdep init与rosdep update问题解决方法(2022.04.08亲测)
  11. 每周更新:Element、Vant新版本更新、IntelliJ IDEA 2019.1 发布 RC 候选版、企业级 UI 设计语言Ant Design 3.15.2 发布
  12. 更改Cygwin的主机名,改WINDOWS的计算机名即可
  13. 什么是多道程序设计技术,试述多道程序运行的特征。
  14. VMware Workstation 14 Pro 安装 Windows Server 2008 R2(完)
  15. OSGB压缩算法有哪些?
  16. ios的wkwebview手势前进和后退,Zipym - 解压缩神器油猴脚本大师m3u8合并专家
  17. 阿诺德给物体加描边_【C4DtoA 27】Arnold渲染器: Toon shader 1/3
  18. Valentino Beauty华伦天奴美妆即将登陆中国市场
  19. 重学数据结构与算法系列:这玩意叫跳表?
  20. unix 时间戳 c语言,C语言实现字符转unix时间戳

热门文章

  1. LeetCode 1563. 石子游戏 V(DP)
  2. LeetCode 635. 设计日志存储系统(map)
  3. LeetCode 第 198 场周赛(434/5778,前7.51%)
  4. 剑指Offer - 面试题12. 矩阵中的路径(DFS回溯)
  5. LeetCode 400. 第N个数字(数学)
  6. c语言 define 关键字,c语言中define的一个不常见的用法
  7. linux常用命令 打开文件,【Linux】常用命令 lsof查看打开的文件
  8. 中countif函数_countif与countifs:单条件与多条件计数适用场景
  9. python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别
  10. 聊聊推荐系统的高阶特征交叉问题