0

当我从http://www.ibm.com/developerworks/java/library/j-jtp04186/?S_TACT=105AGX52&S_CMP=阅读“JVM 通常通过暂停被阻塞的线程并稍后重新调度它来实现阻塞”时,我偶然发现了这个问题 cn-aj

当我们说一个进程或线程在执行 IO 操作(读、写)或访问某些独占资源(锁、同步)时被阻塞,它什么时候才能重新执行?他们是一直等到从某个地方收到通知,还是只是简单地退出并在一段时间后再次运行?

和指定的平台有关系吗?操作系统还是jvm?

4

1 回答 1

0

这将转移到必须为 VM 提供线程支持的底层操作系统 - 必须这样,以便 Java 应用程序可以与通常加载在操作系统上的所有其他进程和线程和谐共存 - 浏览器、侧边栏、杀毒软件、视频/音频播放器、Torrent 客户端、操作系统内部线程等。

阻塞线程的代码根本没有 CPU 周期。处于该状态的线程只是一个暂时未使用的堆栈分配和内核容器中的一个额外的结构/类指针,等待其他东西来改变它的状态。如果它仍然阻塞或延长时间,堆栈甚至可能在繁忙的系统上被换出。

所以是的,他们一直等到从某个地方收到通知。

于 2013-08-13T07:56:04.880 回答