我有一个产生 4 个线程的 java 程序。在每个线程中,我有多个套接字超时。但是,似乎这些超时不受尊重,即该readLine()
功能可能会阻塞更长的时间。
我想要以下行为:如果我将套接字超时设置为 300 毫秒,那么我希望readLine()
函数在调用(即底层选择调用)后的 300 毫秒内返回readLine()
,无论如何。我知道操作系统调度程序会在进行处理器共享时使线程进入睡眠状态,但是在 Java 中有什么方法可以强制线程始终被唤醒以确保这种行为?还是在进行多线程编程时这不是正确的思考方式?
理想情况下,由于我产生了 4 个线程并在 6 核机器上运行,每个线程应该能够获得自己的 CPU 并并行运行,并尊重选择超时......但这可能太期待了...... .
PS:我实际上确实使用 Thread.interrupt() 来确保我的每个线程在一定时间内退出(我检查主线程中经过的时间,如果太长则中断子线程)。在我的每个线程中,我连接到(不同的)服务器,发出请求,然后等待响应。不知道多久会有反应。所以我继续调用该readLine()
方法,直到它超时SocketTimeoutException
。我强制执行 300 毫秒的超时,因为我希望服务器在这段时间内开始响应。我要强制执行此超时的原因是服务器以广播方式运行,并将单个客户端对请求的响应发送到所有客户端。因此,如果我没有超时,我将继续获取数据以响应其他一些客户的请求。