IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 进程和线程、java中的线程、死锁 -> 正文阅读

[Java知识库]进程和线程、java中的线程、死锁

线程、进程基本概念:
? ? ? ? 进程是对运行程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发;

? ? ? ? 线程是进程的子任务,是cpu调度和分配的基本单位,用于保证程序的实时性,实现进程内部的并发,线程是操作系统可识别的最小执行的调度单位。

两者的区别:
1、一个线程只能够属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。

2、进程在执行的过程中拥有独立的内存单元,而多个线程共享进程的内存。

3、进程是资源分配的最小单位,线程是cpu调度的最小单位。

4、系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。
?

进程的五种状态

?创建状态:进程在创建时需要申请一个空白的PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

就绪状态:进程已经准备好,已分配到所需资源,只要分配到就能CPU够立即运行

执行状态:进程处于就绪状态被调度后,进程进入执行状态

阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

java中的线程五种状态

状态图如下所示:

?

?1、new 新创建一个线程的对象

?2、可运行:线程创建对象之后,其他的线程调用该对象的start方法,该线程的状态可能在线程池中,等待线程池调度选中,获取CPU中的使用权

?3、运行:获得CPU的使用权限后,执行程序中的代码

?4、阻塞:阻塞状态是线程因为某种原因放弃了使用CPU的权限,阻塞的三种情形

? ? ? ?(a). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
????????(b). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
????????(c). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

?????????d)线程试图取得一个同步监视器,该同步监视器被其他的线程所占用的

? ? ? ? 等到线程再次的进行调度的时候,其几种的状态如下

? ? ? ? ? ? ? ? a)线程的sleep时间到啦

? ? ? ? ? ? ? ? b)线程获得了同步监视器

? ? ? ? ? ? ? ? c)线程等到了notify的通知

? ? ? ? ? ? ? ? d)线程的wait的时间结束

? ? ? ? ? ? ? ? e)线程的加塞过程结束

? ? ? ? ? ? ? ? f)线程被恢复啦

5、线程死亡:线程run()、main()方法执行结束。

死锁

????????指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。

竞争资源

????????系统中的资源可以分为两类:
????????????????可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,?CPU和主存均属于可剥夺性资源;
????????????????不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。
????????????????不可剥夺资源(例如:系统中只有一台打印机,可供进程P1使用,假定P1已占用了打印机,若P2继续要求打印机打印将阻塞)
????????产生死锁中的竞争资源另外一种资源指的是竞争临时资源(临时资源包括硬件中断、信号、消息、缓冲区内的消息等),通常消息通信顺序进行不当,则会产生死锁

其二就是进程之间的顺序非法

产生死锁的4个必要条件

? ? ? ? 1、互斥条件:进程要求分配的资源进行排他的控制,在一段时间内的资源仅为线程所占用的

? ? ? ? 2、请求和保持条件:当进程的请求资源进行阻塞的,已经获得的资源保持不放

? ? ? ? 3、不可剥夺,进行已经获得资源在未使用之前, 不可剥夺,只能够在使用完成之后进行自己释放

? ? ? ? 4、环路等待:进程-资源环形等待的情况的

要解决死锁的就要从这4个条件进行解决

????????资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
????????只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
????????可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
????????资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

????????

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 21:59:56  更:2022-03-11 22:02:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:30:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码