线程的阻塞

线程的阻塞相信像我一样的初学者遇到线程阻塞时会感到无助 那我就把自己对于线程阻塞的理解记录下来吧 线程阻塞时的特点 该线程放弃 CPU 的使用权 暂停运行 只有当阻塞的原因消除后才回到就绪状态进行运行被其他的线程中断 该线程也会推出阻塞状态 同时抛出 InterruptedE 的异常一般线程中的阻塞 线程执行了 Thread sleep intn 方法 该线程放弃 CPU 的使用 沉睡 n 毫秒 然后恢复运行线程执行了一段同步代码 由于无法获得相关的同步锁 只能进入阻塞状态 等获取了同步锁 才能恢复运行线程

相信像我一样的初学者遇到线程阻塞时会感到无助,那我就把自己对于线程阻塞的理解记录下来吧!

线程阻塞时的特点:

该线程放弃CPU的使用权,暂停运行,只有当阻塞的原因消除后才回到就绪状态进行运行

被其他的线程中断,该线程也会推出阻塞状态,同时抛出InterruptedException的异常

导致阻塞的原因主要为三种:

一般线程中的阻塞:

线程执行了 Thread.sleep (int n) 方法,该线程放弃CPU的使用,沉睡 n 毫秒,然后恢复运行

线程执行了一段同步代码,由于无法获得相关的同步锁,只能进入阻塞状态,等获取了同步锁,才能恢复运行

线程执行了一个对象的 wait ( )方法,进入阻塞状态,只有等到其他线程执行了该对象的 notify ( ) 或 notifyAll ( )方法,才能将其唤醒

线程执行 I/O 操作 或 进行远程通信 时,会因为等待相关的资源而进入阻塞状态 (例如,当线程执行System.in.read()方法时,如果用户没有向控制台输入数据,该线程会一直等读到用户的输入数据才会从read () 方法返回)

Socket客户端的阻塞:

向服务器请求连接时,当线程执行Socket的带参数构造方法 或者 调用connect () 方法,进入阻塞状态,直到连接成功,此线程才会从Socket的构造方法或connect () 方法返回

线程从Socket的输入流读取数据时,如果没有足够的数据,就会进入阻塞状态,直到读取了足够的数据,或者到达输入流的末尾,或者出现异常,才会从输入流的read () 方法返回或异常中断 (例如,通过BufferedReader类使用readLine () 方法时,线程再没有读出一行数据之前,数据都是不足的,会处于阻塞状态)

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

Socket服务器的阻塞:

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

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

线程向Socket的输出流写入一批数据,可能进入阻塞状态,当线程阻塞时,会降低程序的效率

温馨提示:

Java.nio 提供了支持 非阻塞通信 的类

非阻塞方法:

当线程执行执行这些方法时,如果操作还没有就绪时,就立即返回,不会阻塞着去等待操作就绪

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

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

(0)
上一篇 2026年3月20日 上午10:01
下一篇 2026年3月20日 上午10:01


相关推荐

  • IPV4地址详细解释

    IPV4地址详细解释1 IPV4 地址就是给在因特网上的每一台主机的每一个接口分配一个在全世界范围内是唯一的 32 比特的标识符 2 IPV4 有 32 位比特数字组成 为方便记忆 每 8 位为一组转换为 10 进制数字 用 隔开 共分为 4 组 3

    2026年3月19日
    1
  • 如何调整Midjourney分辨率设置?

    如何调整Midjourney分辨率设置?

    2026年3月15日
    2
  • python之pandas数据筛选和csv操作

    本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明1.数据筛选(1)单条件筛选(2)多条件筛选可以使用&(并)与|(

    2021年12月29日
    34
  • PKU A Simple Problem with Integers (段树更新间隔总和)

    PKU A Simple Problem with Integers (段树更新间隔总和)

    2022年1月5日
    40
  • 案例讲解如何将ER图转化为关系模型

    案例讲解如何将ER图转化为关系模型要将 ER 图转化为关系模型 就得先弄清楚 ER 图中的基本元素 如果不清楚主体 属性 键等元素分别代表什么 那么下面谈转化准则的时候 大家可能会冒出很多问号 关于 ER 图的基本元素 此前在这篇文章中做过详细介绍 ER 图 实体关系图 怎么画 这次只拎其中 4 个元素 和下面的转化准则密切相关 出来 以下面这张 ER 图为例进行讲解 1 实体实际问题中客观存在的并且可以相互区别的事物称为实体 实体是现实世界中的对象 可以具体到人 事 物 对应上图中的矩形 如顾客 商品 管理员 平台 2 属性

    2026年3月18日
    2
  • 哈佛结构与冯.诺依曼结构(普林斯顿结构)[通俗易懂]

    哈佛结构与冯.诺依曼结构(普林斯顿结构)[通俗易懂]过去知道计算机的体系结构分为哈佛结构与冯.诺依曼结构,但并没有去总结他们有什么区别。今天来看看它们有什么区别。冯.诺依曼结构,又称为普林斯顿结构。是一种经典的体系结构,有CPU,总线,外部存储器组成。这种体系结构采用程序代码存储器与数据存储器合并在同一存储器里,但程序代码存储器地址与数据存储器地址分别指向不同的物理地址。程序指令宽度与数据宽度一样。数据总线和地址总线共用。但是随着CPU设计

    2022年10月4日
    5

发表回复

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

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