当我第一次了解Java线程时,我被告知,多线程并不真实。 也就是说,有一个CPU,OS在线程之间进行上下文切换以模拟多线程。
现在,我们有i3,i5 i7,双核,core2dou等......
所以,当我有一个使用大小为10的线程池的Java程序时(例如), 假设线程池已满,线程已准备好运行, 在具有2个内核的i5计算机中,同一时间(实际)将运行多少个线程?
答案 0 :(得分:1)
最多会同时执行2个线程(2个核心),但可能会安排更多线程执行(等待cpu)
答案 1 :(得分:1)
一开始Java有'绿色'线程,所以线程调度是在jvm中完成的。但是由于很长一段时间Java都有本机线程。在任何情况下,如果您提供足够的线程,Java可以使用您的所有核心。
PS: 如果您的核心支持超线程,那么操作系统将看到核心数量的两倍。如果你的线程被停顿,例如,这很有用。内存读取,以便另一个线程可以运行。在家里我有一个4核Xeon机器,但启用了超线程,我的操作系统将看到8个核心。但实际上只有4个线程可以同时运行。