如何从另一个停止Java线程?

时间:2016-03-18 17:59:28

标签: java multithreading

也许我想复杂化,但我有以下情况:

我有一个类Server.java扩展Thread,其中包含以下相关代码部分:

public void run() {
    while(listening) {
        try {
            ServerThread cst = new ServerThread(serverSocket.accept());
            cst.start();
        } catch (IOException e) {
            listening = false;
            System.out.println(e.getMessage());
        }
    }
}

我的ServerThread然后处理所有传入的东西。

我现在的问题是,如果有可能通过命令行停止此线程(服务器)。

我尝试添加一个新类,它将处理命令行输入和.interrupt()这个线程,但这有点乱了..

2 个答案:

答案 0 :(得分:1)

以这种方式:

  1. listening提供可以从其他类/线程访问的setter。

  2. ServerSocket上设置合理的超时(例如1秒)并处理SocketTimeoutException

  3. 要停止线程,请将listening设置为false,并在1秒内线程将停止。如果您想要更好的控制,请调查java.nio中的异步I / O类。

答案 1 :(得分:0)

您可以使用 setter 将收听定义为volatile,并在需要停止线程时将其设置为来自其他班级的false