java - 程序在 bufferedreader 关闭时卡住

标签 java sockets crash bufferedreader buffered

关闭缓冲读取器时程序卡住。使用 forge modding API 进行我的世界,但是我之前在使用独立服务器端代码时遇到过这个问题。这个特定的代码工作正常,然后随机开始给我这个问题,不知道如何解决这个问题..

关闭方法:

public static void closeConnection() {
    if (keepConnection) {
        keepConnection = false;

        try {

            bufferedReader.close();
            printWriter.close();
            socket.close();
        }
        catch (IOException e) {

            e.printStackTrace();
        }

        finally{

            token = null;
        }
    }

}

我已经检查以确保这确实是发生卡住的地方。有什么想法吗?

最佳答案

BufferedReader可以close()上阻塞,因为它在lock实例上包含一个synchronized block :

synchronized (lock) {
    if (in == null)
      return;
    in.close();
    in = null;
    cb = null;
}

这意味着您的程序中有另一个线程与 BufferedReader 一起工作(可能在 read() 中被阻塞),当您尝试关闭时,该线程正在持有锁。解决方案是让另一个线程释放锁(如有必要则中断)以允许关闭获得锁然后完成。

关于java - 程序在 bufferedreader 关闭时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42331228/

相关文章:

java - 开发eclipse插件时CDT文件夹问题

java - 无版本 gradle 依赖项

c++ - 在没有 super 用户的情况下在 linux 中打开 RAW 套接字

c - 如何在 Linux/C 中获得更稳定的套接字连接

c# - .NET 4 中的 StackOverflowException

java - 再次调用 Activity 时如何清除变量?

google-chrome-extension - 我的扩展程序崩溃了吗?

java - 在 CDI 容器中手动注册类

perl - 无法通过Perl中的Sock代理连接到主机

java - 在 Android 中访问资源文件