Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在它的文件中Reader.read()说
Reader.read()
读取单个字符。此方法将阻塞,直到字符可用、发生 I/O 错误或到达流的末尾。
当read()没有从流中得到任何东西时,它将阻塞。但是,这种“阻塞”并没有将线程变成State.BLOCKED或- 等待第一个字符时State.WAITING线程仍在,因此我不知道线程是否被.State.RUNNABLEread()read()
read()
State.BLOCKED
State.WAITING
State.RUNNABLE
那么我怎么知道是否Reader.read()阻塞了另一个线程的线程呢?
您可以获取 Thread 的堆栈跟踪,并查看它当时正在运行的方法。
或者我所做的是设置读取开始的时间,当读取完成时会更清楚。我有另一个线程检查这个时间并在时间过长时发出警告。
你为什么不检查Reader#ready()你的阅读是否会被阻止?
Reader#ready()
只需使用 Socket.setSoTimeout() 设置读取超时并捕获 SocketTimeoutException。