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 场景:
ServerSocket server = new ServerSocket(8888);
Socket client = server.accept(); // 这里会阻塞直到有客户端连接
复制代码
当实行 accept() 时,线程会阻塞等待客户端毗连,直到有毗连进入,线程才会被叫醒继承实行。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4