阻塞与挂起的区别

阻塞与挂起的区别线程与进程的阻塞线程在运行的过程中因为某些原因而发生阻塞 阻塞状态的线程的特点是 该线程放弃 CPU 的使用 暂停运行 只有等到导致阻塞的原因消除之后才回复运行 或者是被其他的线程中断 该线程也会退出阻塞状态 同时抛出 InterruptedE 正在执行的进程由于发生某时间 如 I O 请求 申请缓冲区失败等 暂时无法继续执行 此时引起进程调度 OS 把处理机

线程与进程的阻塞

      线程在运行的过程中因为某些原因而发生阻塞,阻塞状态的线程的特点是:该线程放弃CPU的使用,暂停运行,只有等到导致阻塞的原因消除之后才回复运行。或者是被其他的线程中断,该线程也会退出阻塞状态,同时抛出InterruptedException。

       正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般将这种状态称为阻塞状态。

进程的挂起

      挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态,系统在超过一定的时间没有任何动作

共同点: 
           1. 进程都暂停执行 
            2. 进程都释放CPU,即两个过程都会涉及上下文切换

不同点: 
           1. 对系统资源占用不同:虽然都释放了CPU,但阻塞的进程仍处于内存中,而挂起的进程通过“对换”技术被换出到外存(磁盘)中。 
           2. 发生时机不同:阻塞一般在进程等待资源(IO资源、信号量等)时发生;而挂起是由于用户和系统的需要,例如,终端用户需要暂停程序研究其执行情况或对其进行修改、OS为了提高内存利用率需要将暂时不能运行的进程(处于就绪或阻塞队列的进程)调出到磁盘 
           3. 恢复时机不同:阻塞要在等待的资源得到满足(例如获得了锁)后,才会进入就绪状态,等待被调度而执行;被挂起的进程由将其挂起的对象(如用户、系统)在时机符合时(调试结束、被调度进程选中需要重新执行)将其主动激活
 



阻塞的原因:线程中的阻塞、Socket客户端的阻塞、Socket服务器端的阻塞

一般线程中的阻塞:

        A、线程执行了Thread.sleep(int millsecond);方法,当前线程放弃CPU,睡眠一段时间,然后再恢复执行

        B、线程执行一段同步代码,但是尚且无法获得相关的同步锁,只能进入阻塞状态,等到获取了同步锁,才能回复执行。

        C、线程执行了一个对象的wait()方法,直接进入阻塞状态,等待其他线程执行notify()或者notifyAll()方法。

        D、线程执行某些IO操作,因为等待相关的资源而进入了阻塞状态。比如说监听system.in,但是尚且没有收到键盘的输入,则进入阻塞状态。

Socket客户端的阻塞:

        A、请求与服务器连接时,调用connect方法,进入阻塞状态,直至连接成功。

        B、当从Socket输入流读取数据时,在读取足够的数据之前会进入阻塞状态。比如说通过BufferedReader类使用readLine()方法时,在没有读出一行数据之前,数据量就不算是足够,会处在阻塞状态下。

        C、调用Socket的setSoLinger()方法关闭了Socket延迟,当执行Socket的close方法时,会进入阻塞状态,知道底层Socket发送完所有的剩余数据

Socket服务器的阻塞:

        A、线程执行ServerSocket的accept()方法,等待客户的连接,直到接收到客户的连接,才从accept方法中返回一个Socket对象

        B、从Socket输入流读取数据时,如果输入流没有足够的数据,就会进入阻塞状态

        D、线程向Socket的输出流写入一批数据,可能进入阻塞状态

        当程序阻塞时,会降低程序的效率,于是人们就希望能引入非阻塞的操作方法。    

        所谓非阻塞方法,就是指当线程执行这些方法时,如果操作还没有就绪,就立即返回,不会阻塞着等待操作就绪。Java.nio 提供了这些支持非阻塞通信的类。

挂起的原因

(1)终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态成为“挂起状态”。

(2)父进程的请求。有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动。
(3)负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
(4)操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
(5)对换的需要。为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上。


操作系统中睡眠、阻塞、挂起的区别形象解释:

     挂起线程的意思就是你对主动对雇工说:“你睡觉去吧,用着你的时候我主动去叫你,然后接着干活”。

     使线程睡眠的意思就是你主动对雇工说:“你睡觉去吧,某时某刻过来报到,然后接着干活”。

     线程阻塞的意思就是,你突然发现,你的雇工不知道在什么时候没经过你允许,自己睡觉了,但是你不能怪雇工,因为本来你让雇工扫地,结果扫帚被偷了或被邻居家借去了,你又没让雇工继续干别的活,他就只好睡觉了。至于扫帚回来后,雇工会不会知道,会不会继续干活,你不用担心,雇工一旦发现扫帚回来了,他就会自己去干活的。因为雇工受过良好的培训。这个培训机构就是操作系统。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199023.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午2:01
下一篇 2026年3月26日 下午2:01


相关推荐

  • java CAS详解[通俗易懂]

    java CAS详解[通俗易懂]CAS解释:CAS(compareandswap),比较并交换。可以解决多线程并行情况下使用锁造成性能损耗的一种机制.CAS操作包含三个操作数—内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。一个线程从主内存中得到num值,并对num进行操作,写入值的时候,线程会把第一次取到的num值和主内存中num值进行比较,如果相等,就会将改变后的num写入主内存,如果不相等,则一直循环对比,知道成功为止。CAS

    2022年7月9日
    28
  • vue组件引入layui框架的table组件「建议收藏」

    vue组件引入layui框架的table组件「建议收藏」注:暂时解决了问题,以后再根据情况更新。layui框架中,layer、laydate、layim可以作为单独的模块来使用,所以可以在vue组件中直接使用,但是对于layui的其它组件,如数据表格table组件,则不能直接使用。可以通过在入口js文件加入以下代码,解决:require"**/layui.js"//**代表layui所在的路径…

    2022年6月25日
    64
  • OpenClaw 3.8重磅发布,修复200多个bug

    OpenClaw 3.8重磅发布,修复200多个bug

    2026年3月16日
    2
  • C语言位运算应用实例

    C语言位运算应用实例这里写自定义目录标题 C 语言位运算应用实例一 位操作规则 1 与运算 amp 2 或运算 C 语言位运算应用实例正在准备 2019 年 RM 比赛 遇到这样一个场景 Tx2 图像采集之后要把目标位置传给 stm32 控制板 位置信息有 x y 这一属性 准备用串口做数据传输 传输数据范围是 0 560 且为整数 但是查了一下发现 stm32 的串口一次最多读 8 位数据 也就是 0 255 没有办法 只能把数

    2026年3月18日
    2
  • navicat15激活码最新_通用破解码

    navicat15激活码最新_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    81
  • 蓝牙音频编码方式_aac蓝牙编码

    蓝牙音频编码方式_aac蓝牙编码https://zhuanlan.zhihu.com/p/265597723早在2000年,蓝牙耳机就已经出现,但由于技术限制,只能用于通话。2008年,随着蓝牙A2DP(AdvancedAudioDistributionProfile)开始普及,立体声蓝牙耳机日渐流行。发展到现在,手机的耳机插口几近取消,双无线(TWS,TrueWirelessStereo)耳机正处于爆发期…本文从蓝牙音频传输原理讲起,从旧到新介绍五种蓝牙音频编码,最后落脚实地,介绍如何选择和配置耳机/手机的蓝牙

    2025年10月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号