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