有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程如何阻止另一个Java线程?

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

我有一个班级服务器。java扩展线程,包含以下相关部分的代码:

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

然后,我的服务器线程处理所有传入的内容

我现在的问题是,是否有任何可能停止这个线程(服务器),比如通过命令行

我试图添加一个新类,该类将处理命令行输入和。打断这条线,但那只会把事情搞得一团糟


共 (2) 个答案

  1. # 1 楼答案

    这里有一个方法:

    1. 为可以从另一个类/线程访问的listening提供一个setter

    2. ServerSocket上设置一个合理的超时时间(比如1秒),并处理SocketTimeoutException

    要停止线程,请将listening设置为false,然后在1秒内线程将停止。如果想要更好的控制,可以研究java.nio中的异步I/O类

  2. # 2 楼答案

    您可以使用setter将侦听定义为volatile,并在需要停止线程时从另一个类将其设置为false