如何停止Java线程?

时间:2012-03-19 21:58:07

标签: java multithreading

我需要知道如何在此程序中停止线程:

public class MasterServerThread extends Thread{
private Socket socket = null;
private MasterServer server = null;
private int clientID = -1;
private BufferedReader streamInput  = null;
private PrintWriter streamOutput = null;

public MasterServerThread(MasterServer _server, Socket _socket){
    server = _server;
    socket = _socket;
    clientID = _socket.getPort();
}

public void run(){
    server.Log("Server Thread " +clientID + " running");
    while(true){
        String test;
        try {
            test = streamInput.readLine();
            System.out.println("Client "+clientID+": "+test);
        } catch (IOException e) {
            System.out.println(clientID+ " Error reading: "+e.getMessage());
        }
            server.handleClient(clientID, "test");

    }
}
}

这是我的服务器线程代码。当我的客户端自行终止时,我会得到无穷无尽的错误循环:

  

53088读取错误:连接重置0

我知道这里需要做些什么,但我不知道究竟是什么:

      try {
        test = streamInput.readLine();
        System.out.println("Client "+clientID+": "+test);
    } catch (IOException e) {
        System.out.println(clientID+ " Error reading: "+e.getMessage());
    }

2 个答案:

答案 0 :(得分:4)

你应该更好地处理你的IOException,然后从while(true)循环返回(或中断)。我不确定你是否有任何理由想要在BufferedReader抛出这样的例外之后继续读取它。

try {
     test = streamInput.readLine();
     System.out.println("Client "+clientID+": "+test);
 } catch (IOException e) {
     System.out.println(clientID+ " Error reading: "+e.getMessage());
     // you need the return line here -- or a break
     return;
 }

答案 1 :(得分:0)

如果连接重置,最好的办法就是从run方法返回,这将停止一个主题。