我遇到了终止等待accept()
电话的线程的问题。
accept()
:侦听与此套接字的连接并接受它。该方法将阻塞,直到建立连接。
我有GestorBuzon
实现Runnable
接口:
public class GestorBuzon implements Runnable{
private static volatile boolean running = true;
public void run() {
try {
while (running) {
-- pre code
accept();
-- post code
}
} catch(IOException e) {
terminate();
}
}
public static void terminate() {
running = false;
}
}
我有MessageSystem
类来启动和停止线程:
public class MessageSystem {
private GestorBuzon gestorBuzon;
private Thread thread;
public MessageSystem() {
// Starts the Thread
contextInitialized();
}
private void contextInitialized() {
gestorBuzon = new GestorBuzon();
thread = new Thread(gestorBuzon);
thread.start();
}
private void contextDestroyed() {
if (thread != null) {
gestorBuzon.terminate();
try {
thread.join();
} catch (InterruptedException e) {
gestorBuzon.terminate();
}
}
}
}
我多次调用accept()
类中的Runnable
函数,但是当我使用contextDestroyed()
函数时,线程仍在等待accept()
并且线程不会终止。我做错了什么?
答案 0 :(得分:1)
只需通过ServerSocket
在setSoTimeout()
上设置套接字超时,并在其触发时捕获SocketTimeoutException
。然后,您可以检查running
块中的catch
标志等,并决定是继续还是停止接受。