Java 如何从主线程终止子线程

Java 如何从主线程终止子线程,java,multithreading,java-threads,Java,Multithreading,Java Threads,我正在尝试终止正在等待服务器输入的子线程。我试着用旗子做,但它停了下来 message=serverReader.readLine()!isClosed(), 因为它等待来自服务器的输入,并且只有在该输入之后,它才会检查标志并中断。但这不是一个好的解决方案,因为没有服务器消息我无法停止它。 我还尝试先检查标志,然后检查readline(),但它也不起作用。 有什么好的解决办法吗 @Override public void run() { String message; try {

我正在尝试终止正在等待服务器输入的子线程。我试着用旗子做,但它停了下来
message=serverReader.readLine()!isClosed()
, 因为它等待来自服务器的输入,并且只有在该输入之后,它才会检查标志并中断。但这不是一个好的解决方案,因为没有服务器消息我无法停止它。 我还尝试先检查标志,然后检查readline(),但它也不起作用。 有什么好的解决办法吗

@Override
public void run() {
    String message;
    try {
        while((message = serverReader.readLine()) != null && !isClosed()) {
            consoleWriter.println("Other user: " + message);
            consoleWriter.flush();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void setUpNetworking() {
    try {
        Socket socket = new Socket("127.0.0.1", 5000);
        InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
        serverWriter = new PrintWriter(socket.getOutputStream());
        serverReader = new BufferedReader(streamReader);

        //Starting listening messages from server
        incomeReader = new Thread(new IncomeMessagesReader(serverReader, consoleWriter, this));
        incomeReader.start();


        System.out.println("Networking established");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

交换
&
订单。
&&
运算符短路,因此如果左侧出现故障,右侧将无法执行。对于
|
,情况正好相反

while (!isClosed() && readLine()) 

不,我已经看过了。问题是他们正在使用标志,我还有来自服务器的readline(),这会停止处理和标志检查What's serverReader?我用serverReader@AndrewTobilko有没有可能直接中断线程而不是关闭套接字会导致泄漏?@BheshGurung-hhm,这很有趣。。。我不确定,但我认为一些资源可能被错误地释放/或者根本没有被释放,因此可能会发生泄漏。正如我在上面所写的,我尝试过。这没用。我认为它检查了国旗,它是假的,它去了等待队列。可以根本不获取任何其他消息,但我仍然必须在需要时停止它。
isClosed()
可能会在条件
之后立即变为
true
!isClosed()
已验证