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

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

官方全面解读“5G+工业互联网”

来源:工信部网站未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)大脑研究计划,构建互联网(城市)大脑技术和企业图…

为什么要学数学?因为这是一场战略性的投资

来源:数学内参如果将数学学习的好坏仅仅理解为“刷题”的数量和速度,那充其量也只能成为一名熟练的数学工匠。我们所受的数学训练,所领会的数学思想和精神,所获得的数学教养,无时无刻不在发挥着积极的作用,…

滤波 放电速度比充电慢 模电

我不理解为什么这里放电速度比充电速度慢? 因为充电时间常数小,而放电时间常数大 转载于:https://www.cnblogs.com/china520/p/10389477.html

Hexo如何绑定个人域名

前两天用HexoGitHub搭建好了自己的个人博客https://www.serendipper-x.cn/,默认域名github下的二级域名:username.github.io,为了提升访问速度和博客的格调,绑定个人域名是多数人的选择。下面给大家介绍详细过程。 购买域名 国内…

什么是涌现?

来源:集智俱乐部作者:由集智俱乐部众包生产在哲学、系统论、科学和艺术中,当一个实体被观察到具有其所有组成部分本身没有的属性时,涌现 emergence 就出现了。这些属性或行为只有当各个部分在一个更广泛的整体中相互作用时才会涌现…

[UVa-437] Color Length

计算贡献&#xff1b;压缩空间优化时间 传送门&#xff1a;$>here<$ 题意 给出两个字符串$a$,$b$&#xff0c;将他们穿插起来&#xff08;相对位置不变&#xff09;,要求最小化$\sum L(c)$&#xff0c;其中$L(c)$的定义时在穿插完的字符串中字符$c$的最大位置与最小位置的…

Vue前后端对接时判断是否与后端连接成功

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/Happyaileaf/article/details/101985533 Vue前后端对接时判断是否与后端连接成功使用 axios API连接…

人工智能vs人类智能小传

来源&#xff1a;混沌巡洋舰Alphago代表的深度网络人工智能体现了AI逐步进入未知领域的强大能力&#xff0c; 因此有人堪忧有人喜乐&#xff0c; 却极少有人戳中要害。说AI比人牛是因为它下围棋比人厉害&#xff1f; 说AI离真正的智能很遥远是因为它不能创造吗&#xff1f; 是…

IDEA换行CRLF, LF, CR的解释和默认设置

在window下开发有一个大坑&#xff0c;就是换行默认是CRLF&#xff0c;也就是回车换行&#xff0c;但是Linux下只有换行LF&#xff0c;这样代码提交后&#xff0c;会出现编译问题&#xff0c;所以最好的办法是在IDEA下设置默认为LF。 首先我们先介绍CRLF&#xff0c;LF和CR这三…

云数据库

一.概述 1.1 云计算通过网络以服务的方式为用户提供廉价的资源。 1.2 优势 按需服务&#xff1b;随时服务&#xff1b;通用性&#xff1b;高可靠性&#xff1a;冗余备份&#xff1b;成本低&#xff0c;廉价&#xff1b;超大规模&#xff1b;虚拟化&#xff1b;扩展性高&#…

线程的构造和运行

① 用Thread类构造线程对象&#xff08;继承Thread类来创建并启动多线程&#xff09; package cn.sxt.thread;/*** 创建线程方式一&#xff1a;* 1、创建&#xff1a;继承Thread重写run* 2、启动&#xff1a;创建子类对象start* author 1979**/public class StartThread ext…

一个困扰数学家30多年的分类问题,终于被解决了!

来源&#xff1a;AI科技评论作者&#xff1a;Steve Nadis编译&#xff1a;陈彩娴编辑&#xff1a;青暮一般情况下&#xff0c;当你要对某个特定地区的植物进行调查时&#xff0c;你可能会按植物的种类来划分。就这种方法来看&#xff0c;如果是沿着托斯卡纳海岸的某些地带做这类…

NuGet version

https://stackoverflow.com/questions/15964935/get-nuget-exe-version-from-command-line Typing nuget help from the command line will in addition to the expected help information also list the current NuGet.exe version. 从官网下载&#xff0c;然后直接放在C:\Win…

线程的互斥与同步机制

同个人博客&#xff1a;http://tsundere-x.top/ 一、互斥 为何需要引入互斥机制&#xff1f; 当多个线程对同一数据并发读写&#xff08;至少有一个线程执行写操作&#xff09;时&#xff0c;这种情形被称为竞争。竞争会导致数据读或写的不确定性。而有时这种不确定性是不可…

欢迎参加“城市大脑与应急管理”专家研讨会

来源&#xff1a;城市大脑全球标准研究组数字大脑学术系列沙龙第二期“城市大脑与应急管理”专家研讨会2021以来城市大脑的建设与研究获得了长足发展&#xff0c;数百个城市开展了城市大脑的建设与规划&#xff0c;取得了诸多成果。于此同时&#xff0c;伴随着疫情、水灾、交通…

MapReduce词频统计

1.1 文件准备 创建本地目录和创建两个文本文件&#xff0c;在两个文件中输入单词&#xff0c;用于统计词频。 cd /usr/local/hadoop mkdir WordFile cd WordFile touch wordfile1.txt touch wordfile2.txt1.2 创建一个HDFS目录&#xff0c;在本地上不可见,并将本地文本文件上传…

炼数成金 Oracle EBS R12 DBA培训视频教程

----------------------课程目录------------------------------├01_第一课EBSDBA概要├02_第二课 EBSDBA 安装├02_第二课 R12 Linux x86 64bit installation├03_第三周 EBSDBA 架构├04_第四周EBSDBA-基本管理├05_第五周EBSDBA-OAM├06_第六周EBSDBA-sysadmin├07_第7周E…

Spring中注解大全

Spring中注解大全 Controller 标识一个该类是Spring MVC controller 处理器&#xff0c;用来创建处理http请求的对象 Controller public class TestController{RequestMapping("test")public String test(Map<String,Object> map){return "hello"…

Linux系统组成

1 系统组成 BootLoader&#xff1a;操作系统引导程序 内核&#xff1a; 文件系统&#xff1a;应用程序(用户开发的、网上下载的) 2 安装USB驱动 dongryd-linux:~$ insmod usb_dnw.ko //安装USB驱动 dongryd-linux:~$ kernel:GuoQian USB driver for DMW! //出现这一句说明驱动…

使用github托管代码以及github一些最常用的命令

生成SSH密钥 首先打开命令行工具&#xff0c;右键鼠标任意位置打开git bash here,然后输入以下命令 cd ~/.ssh 使用ssh-keygen生成密钥 ssh-keygen -t rsa -C "我的邮箱地址" 使用默认的文件名&#xff0c;输入密码&#xff0c;密钥生成成功 直接复制命令行看到的密钥…