java - 如何阻止另一个 Java 线程?

标签 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() 这个线程,但这有点搞砸了..

最佳答案

这是一种方法:

  1. 提供一个可以从另一个类/线程访问的监听 setter 。

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

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

关于java - 如何阻止另一个 Java 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091278/

相关文章:

java - 如何从数据库生成用于 Hibernate 4 的 Java 类

java - 确定性语言的适用性

java - 为什么有人需要线程安全的 SimpleDateFormat 对象?

java - C# 中 Java 的 >>>= 是什么

java - 从 Java 中的 yaml 读取 map 得到 null

java - KeyListener/KeyEvent 不起作用?

java - 将元素从不同的类添加到 ArrayList 时出现问题

c - Recv() 不在单独的线程中工作,C 套接字编程

java - 当作业到达 threadPoolExecution 时调用所有线程

c - 在结构体内部定义结构体指针