日期:2014-05-20  浏览次数:20743 次

如何在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();
}
}
......................