【发布时间】:2013-10-26 11:44:51
【问题描述】:
我真的很想知道如何中断被某些 I/O 操作阻塞的线程? I/O 是通过套接字,我不想close() 套接字。
我尝试使用Thread.interrupt() 中断线程,但没有成功。
线程被 IO 操作阻塞:
void run(){
byte[] data=new byte[1024];
in.read(data);//blocked!
}
线程中断被阻塞的线程(没用):
void run(){
blockedThread.interrupt();//no success!
}
【问题讨论】:
-
我认为当您无法访问要关闭的底层流时,您甚至无法停止它。
-
AFAIK 只有在阻塞操作是可中断的情况下才会起作用
-
@MadProgrammer 是可中断的接口吗?还是低级实现?!
-
@parsaporahmad 不,这是一个概念。需要发生的是,阻塞线程的任何操作都需要监视该线程的中断状态,以使其可中断
-
在套接字上调用 Socket.close() 将关闭关联的 InputStream 和 OutputStream 对象,并且对套接字本身的操作将抛出 SocketException。
标签: java multithreading sockets io stream