luk*_*o05 136 java networking interrupt blocking
在我的主线程中,我有一个while(listening)调用accept()我的ServerSocket对象的循环,然后启动一个新的客户端线程,并在接受新客户端时将其添加到Collection.
我还有一个Admin线程,我想用它来发出命令,比如'exit',这将导致所有客户端线程被关闭,自行关闭,并通过转向监听来关闭主线程.
但是,accept()在while(listening)循环块中调用,并且似乎没有任何方法可以中断它,因此无法再次检查while条件并且程序无法退出!
有一个更好的方法吗?或者某种方式来中断阻塞方法?
Sim*_*olt 144
你可以close()从另一个线程调用,然后accept()调用将抛出一个SocketException.
Juh*_*älä 27
设置超时accept(),然后调用将在指定时间后超时阻塞:
http://docs.oracle.com/javase/7/docs/api/java/net/SocketOptions.html#SO_TIMEOUT
在阻止
Socket操作上设置超时:Run Code Online (Sandbox Code Playgroud)ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();必须在进入阻止操作之前设置该选项才能生效.如果超时到期并且操作将继续阻止,
java.io.InterruptedIOException则引发.该Socket不会在这种情况下关闭.
呼唤close()的ServerSocket一个选择吗?
http://java.sun.com/j2se/6/docs/api/java/net/ServerSocket.html#close%28%29
关闭此套接字.当前在accept()中被阻塞的任何线程都将抛出SocketException.
| 归档时间: |
|
| 查看次数: |
86320 次 |
| 最近记录: |