如何在java的派生线程中杀掉守护进程
socket程序,在server中监听到client的连接以后派生出一个线程来通讯,然后server继续监听client的连接请求。main代码如下:
public class MyServer2_MultiUser extends Thread {
// ...
public static void main(String[] args) throws
IOException {
ServerSocket server = new ServerSocket(5678);
while (true) {
// transfer location change Single User or Multi User
MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
mu.start();
}
}
}
现在我想在client中发送一个halt命令,当服务端的相关通讯线程接收到这个命令以后就立即中断连接,并且同时也停止派生出它的MyServer2_MultiUser进程。请问该如何做?
------解决方案--------------------顶,没有遇到过这类问题。
------解决方案--------------------建议用数组或者ArrayList/Vector记录你在while循环里面的MyServer2_MultiUser实例,当接收到halt命令,用for循环从数组中取出记录的实例,逐个停止。
------解决方案--------------------是否可以在类里面添加一个过程
public void threadStop(boolean isStop){
isStop = false;
}
这样可以增加一个判断,如果接收一个halt时,就可以通过设置标志isStop为false,实现杀掉派生线程的需求。
另外要在mu.start();前面加上break;结束主线程。
------解决方案--------------------public class MyServer2_MultiUser extends Thread {
// ...
public static ServerSocket server ;// 全局,扩大作用域
public static void main(String[] args) throws IOException {
server = new ServerSocket(5678);
while (true) {
// transfer location change Single User or Multi User
if(server != null) //加额外判断
{
MyServer2_MultiUser mu = new MyServer2_MultiUser(server.accept());
mu.start();
}
}
}
}
.................
{
try{
MyServer2_MultiUser.server.close();
MyServer2_MultiUser.server = null;
}
catch(Exception e)
{
e.printStackTrace();
}
}
......................