【发布时间】:2021-01-25 10:59:07
【问题描述】:
我有一个应用程序需要打开数千个套接字连接并等待消息。客户端正在使用 java 阻塞套接字读取。这意味着我将只能有 N 个并发打开的连接(基于线程集的执行程序数),因为所有 N 个线程都将在活动等待(RUNNABLE 状态)时被阻塞
有没有办法让这些套接字读取以在数据可用时“唤醒”线程(以与 NIO 套接字相同的方式)?
即当前行为 线程池(4 个线程)
- socketRead0(..) - 可运行
- socketRead0(..) - 可运行
- socketRead0(..) - 可运行
- socketRead0(..) - 可运行
没有更多的线程可以执行
期望的行为 线程池(4 个线程)
- socketRead0(..) - 等待(停车)
- socketRead0(..) - 等待(停车)
- socketRead0(..) - 等待(停车)
- socketRead0(..) - 等待(停车)
- socketRead0(..) - RUNNABLE(正在执行读取并将返回数据)
这样,另一个线程可以在其他线程等待时启动并执行套接字读取数据可用
注意:我知道这可以通过 NIO 实现,但想知道如何将这种行为转移到旧版同步调用(如果可能) 谢谢
【问题讨论】:
标签: java multithreading sockets