[英]Java Thread - blocked status
我有一个非常基本的问题。 如果线程在IO操作中处于繁忙状态,为什么不将其视为RUNNING状态? 如果IO操作花费很长时间,则意味着该线程正在执行其工作。 实际工作时如何将其称为“阻塞”?
我不知道在执行IO时您在何处读取到线程处于BLOCKED状态。 BLOCKED状态文档说:
线程的线程状态被阻塞,等待监视器锁定。 处于阻塞状态的线程在调用Object.wait之后正在等待监视器锁定输入同步的块/方法或重新输入同步的块/方法。
因此,不,执行IO时线程不会处于阻塞状态(除非读写会迫使线程在对象的监视器上等待)。
如果您在IO上阻塞线程的情况下运行以下代码
public class Main {
public static void main(String[] args) throws InterruptedException {
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// blocking read
try {
System.in.read();
} catch (IOException e) {
throw new AssertionError(e);
}
}
});
thread.start();
for(int i=0;i<3;i++) {
System.out.println("Thread status: "+thread.getState());
Thread.sleep(200);
}
System.exit(0);
}
}
版画
Thread status: RUNNABLE
Thread status: RUNNABLE
Thread status: RUNNABLE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.