gpt4 book ai didi

java - 被 java NIO Selector.select() 阻塞的线程应该被视为等待还是正在运行

转载 作者:行者123 更新时间:2023-12-02 02:43:14 30 4
gpt4 key购买 nike

selectorObj.select() 方法的文档说明

This method performs a blocking selection operation. It returns only after at least one channel is selected, this selector's wakeup method is invoked, or the current thread is interrupted, whichever comes first.

我理解文档被select方法阻塞的线程,不应该等待吗?当我运行探查器时,我看到线程处于运行模式而不是等待状态。

虽然,我接受这一点,但没有提到线程应该处于等待状态,但我的假设是,直到信号调度程序线程提供一些与选择器注册的 channel 上的任何 Activity 有关的输入;线程应该处于等待状态。

请为我提供一些帮助,说明为什么我的假设可能是错误的。

最佳答案

当线程在 I/O 调用中被阻塞时,就 Java 线程而言,它仍然在运行。

大多数探查器只是显示线程状态,其定义为,

  • NEW 尚未启动的线程处于此状态。
  • RUNNABLE 正在执行的线程Java虚拟机在这个状态。
  • BLOCKED 被阻塞的线程等待监视器锁就在这状态。
  • WAITING 正在等待的线程无限期地让另一个线程执行特定操作是在这种状态。
  • TIMED_WAITING 一个线程等待另一个线程执行最多指定的操作等待时间就处于这个状态。
  • TERMINATED 已退出的线程就处于这种状态。

如您所见,线程的 WAITING/BLOCKED 状态与 I/O 无关。

关于java - 被 java NIO Selector.select() 阻塞的线程应该被视为等待还是正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57164608/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com