在操作I/O流的时候经常会发生阻塞,这会让线程进入BLOCKED状态吗?I/O流中的阻塞和线程的BLOCKED状态是一回事吗?
操作I/O流时发生阻塞不会让线程进入BLOCKED状态,它们并不是同一个概念,线程一般是在获取monitor lock的时候才会进入BLOCKED状态,更详细的内容可以参考Thread的生命周期和状态。
1public static void main(String[] args) throws IOException {
2 Thread main = Thread.currentThread();
3 new Thread(() -> {
4 try {
5 Thread.sleep(1000);
6 System.out.println(main.getState());
7 } catch (InterruptedException e) {
8 e.printStackTrace();
9 }
10 }).start();
11 System.in.read();
12}
在main线程中启动了一个子线程用于打印main线程的状态,然后main线程开始读取输入流,打印输出如下
RUNNABLE
内容