【发布时间】:2012-04-03 13:54:22
【问题描述】:
Thread.yield() 静态方法(在 Java 中)导致当前正在执行的线程对象暂时暂停并允许其他线程执行。
如果有多个线程正在执行(在具有超线程功能的 CPU 中),哪个线程会暂停?
【问题讨论】:
标签: java multithreading
Thread.yield() 静态方法(在 Java 中)导致当前正在执行的线程对象暂时暂停并允许其他线程执行。
如果有多个线程正在执行(在具有超线程功能的 CPU 中),哪个线程会暂停?
【问题讨论】:
标签: java multithreading
那个叫Thread.yield的人...
【讨论】:
您似乎对 HT 有误解,HT 由硬件处理,但需要由操作系统调度线程。如果一个线程让出 CPU,它会立即停止其时间片,并且操作系统将在其位置(或空闲进程)放置一个新线程。其他线程将照常继续。
【讨论】:
从 Java 的角度来看,超线程 CPU 上的线程与运行在不同内核上的线程在性质上没有区别。 (他们只是更慢......)
但是,您可能误解了yield 的作用。它不保证暂停当前线程。相反,它只是提示线程调度程序现在运行不同的线程。
如果没有其他可运行的线程,那么调度器将立即继续刚刚产生的线程。
调度程序可能决定忽略提示。
如果您希望/需要当前线程真正暂停,请调用sleep 或阻塞等待某个事件发生。
【讨论】: