IT评测·应用市场-qidao123.com技术社区

标题: 操作体系学习条记——[特殊字符]超具体 | 如何叫醒被阻塞的 socket 线程?线程阻塞原理、线程池、fork/vfork彻底讲明白! [打印本页]

作者: 愛在花開的季節    时间: 2025-4-15 23:40
标题: 操作体系学习条记——[特殊字符]超具体 | 如何叫醒被阻塞的 socket 线程?线程阻塞原理、线程池、fork/vfork彻底讲明白!
一、什么是阻塞?为什么线程会阻塞?

线程阻塞是一种等待某个事件发生的状态。比如等待 I/O 完成、锁开释、条件满意、子线程结束等。
常见导致线程阻塞的情况有:
阻塞方式常见场景叫醒方式Thread.sleep(ms)让出 CPU 一段时间时间到了自动叫醒Object.wait()等待被 notify()被 notify() / notifyAll() 叫醒Thread.join()主线程等待子线程结束子线程实行完毕自动叫醒LockSupport.park()显式挂起线程调用 unpark(Thread) 叫醒socket accept() / read()阻塞等待客户端毗连/数据客户端毗连/发送数据synchronized 锁竞争等待锁资源锁开释后参与竞争
二、socket线程被阻塞的典型场景

举个最常见的 ServerSocket 场景:
  1. ServerSocket server = new ServerSocket(8888);
  2. Socket client = server.accept(); // 这里会阻塞直到有客户端连接
复制代码
当实行 accept() 时,线程会阻塞等待客户端毗连,直到有毗连进入,线程才会被叫醒继承实行。





欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4