Java线程 – 阻止状态

我有一个非常基本的问题。 如果线程在IO操作中忙,为什么不将其视为RUNNING状态? 如果IO操作需要很长时间,则表示该线程正在执行其工作。 如果一个线程在实际执行它的工作时如何被称为BLOCKED?

在做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