我有两个条件,一个在另一个里面,用布尔值来控制它们。基本上,一个是终止一个共享,另一个是倾听连接。用户可以选择禁用共享,在这种情况下,服务器会停止监听,但不会终止。如果用户选择终止,则两个布尔值都设置为false,并结束循环。为什么不重新评估条件?
这是我的代码:
public void run() {
while (!terminate) {
while (listening) {
try {
// accept connection -> create a new thread for each client
ClientServerShareInstance clientServerShareInstance = new ClientServerShareInstance(serverSocket.accept(), ui);
Thread clientServerThread = new Thread(clientServerShareInstance);
clientSockets.add(clientServerShareInstance);
connectedClients++;
clientServerThread.start();
} catch (IOException ex) {
}
}
}
}
public void closeAllClientConnections() {
for (Iterator it = clientSockets.iterator(); it.hasNext();) {
ClientServerShareInstance clientServerShareInstance = (ClientServerShareInstance) it.next();
clientServerShareInstance.closeAllConnections();
it.remove();
}
try {
this.serverSocket.close();
} catch (IOException ex) {}
this.setActive(false);
this.connectedClients = 0;
}
public void openConnection() {
try {
serverSocket = new ServerSocket(portNumber, 0, Inet4Address.getLocalHost());
setActive(true);
} catch (IOException ex) {}
}
}
的closeAllClientConnections()
方法禁用份额(不终止它),而且份额openConnection()
重新启用。
问题是,如果我禁用共享,它应该循环terminate
而无限期地cicle,测试值listening
。当我将listening
设置为true
时,它应该在循环中重新输入第二个字符,然后再次开始监听,因为我打开了服务器套接字(尽管它与此无关,我只是说它必须再次被初始化,因为我关闭了它当我禁用共享)。但是,禁用后,即使调用openConnection()
,也不会租用listening
循环。
有人知道这里有什么问题吗?
'SETACTIVE( ...)'设置'听'的价值? – Gray
不,他们只是在我的班级里宣布为常规私人布尔人。我没有使用volatile,因为我认为对象是在多个线程之间共享的,而且我不需要锁定,因为它不是一个复杂的操作,多个线程同时“争夺”访问权限。 – swiftcode
@Gray是的,它的确如此。它只是这个变量的二传手。 – swiftcode