当一个进程或线程被阻塞时,它是否会永远等待通知或暂时休眠一段时间?

时间:2013-08-13 02:31:53

标签: multithreading jvm block

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

当我们说进程或线程在执行IO操作(读取,写入)或访问某些独占资源(锁定,同步)时被阻止时,何时会重新执行?他们是否一直在等待从某个地方收到通知,或者只是退出轮流并在一段时间后再次运行?

它与指定的平台有什么关系吗? os还是jvm?

1 个答案:

答案 0 :(得分:0)

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

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

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