ita*_*ind 4 java thread-synchronization java-threads
假设一个 Java 线程执行一些 I/O 操作,比如使用传统的阻塞 Java I/O 读取文件。
问题是:等待时线程的状态是什么?
我不知道它是 RUNNING(进行一些主动等待)还是 WAITING(也许有某种监视器在文件数据准备好时唤醒线程)。
我怎样才能找到它?
谢谢。
根据我对 javadoc 的阅读,在 I/O 系统调用中被阻塞的线程应该处于 RUNNABLE 状态。
public static final Thread.State RUNNABLE可运行线程的线程状态。处于可运行状态的线程正在 Java 虚拟机中执行,但它可能正在等待来自操作系统的其他资源,例如处理器。
其他可能的线程状态的规定要严格得多,相应的规范使它们明显不适用。
我已经通过测试(在 Linux 上使用 OpenJDK Java 8)确认了这一点。
public class Test {
public static void main(String[] args) throws Exception {
Thread t = new Thread(new Runnable() {
public void run() {
try {
while (true) {
System.in.read(); // Block for input
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
while (true) {
System.out.println("State: " + t.getState());
Thread.sleep(1000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,假设您将应用程序设计为一个线程将 I/O 请求移交给第二个线程,那么第一个线程将处于 WAITING(或可能 BLOCKED)状态,等待 I/O 线程交付。然而,普通的 Java I/O 不会那样做。请求 I/O 的线程是进行系统调用的线程。
我怎样才能找到它?
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |