0

在它的文件中Reader.read()

读取单个字符。此方法将阻塞,直到字符可用、发生 I/O 错误或到达流的末尾。

read()没有从流中得到任何东西时,它将阻塞。但是,这种“阻塞”并没有将线程变成State.BLOCKED或- 等待第一个字符时State.WAITING线程仍在,因此我不知道线程是否被.State.RUNNABLEread()read()

那么我怎么知道是否Reader.read()阻塞了另一个线程的线程呢?

4

3 回答 3

0

您可以获取 Thread 的堆栈跟踪,并查看它当时正在运行的方法。

或者我所做的是设置读取开始的时间,当读取完成时会更清楚。我有另一个线程检查这个时间并在时间过长时发出警告。

于 2012-08-10T09:05:05.073 回答
0

你为什么不检查Reader#ready()你的阅读是否会被阻止?

于 2012-08-10T09:07:33.827 回答
0

只需使用 Socket.setSoTimeout() 设置读取超时并捕获 SocketTimeoutException。

于 2012-08-11T02:09:27.383 回答