操作体系学习条记——[特殊字符]超具体 | 如何叫醒被阻塞的 socket 线程? ...

打印 上一主题 下一主题

主题 1827|帖子 1827|积分 5481

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、什么是阻塞?为什么线程会阻塞?

线程阻塞是一种等待某个事件发生的状态。比如等待 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() 时,线程会阻塞等待客户端毗连,直到有毗连进入,线程才会被叫醒继承实行。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表