【发布时间】:2020-01-17 21:13:48
【问题描述】:
每个 Java 线程都映射到 Windows 中的内核线程,在 Windows 中,线程切换的时间片为 10-100 毫秒。
但是,从以下简单代码的结果来看,似乎每个线程在每一行代码中都会切换 CPU 资源。为什么?
class MyThread extends Thread{
public MyThread(String name){
super(name);
}
public void run(){
for(int i=0;i<5;i++){
System.out.println( this.getName()+":"+i);
}
}
public static void main(String args[]){
Thread p = new MyThread("t1");
p.start();
for(int i=0;i<5;i++){
System.out.println( "main:"+i);
}
}
}
【问题讨论】:
-
预期和实际输出是多少?另请注意:代码中最耗时的活动是打印语句。哪个都一样,有各种奇怪的效果....
-
我很好奇你是怎么知道它根据你的例子切换 CPU 的?
-
System.out是一个缓冲PrintStream。执行顺序不一定是你在控制台上看到的。但是是的,每个 Java 线程都有一个由操作系统调度的本地线程。 -
给定多个 CPU 不应该单个线程在同一个 CPU 上获得全时?
-
No @prayagupd ... 除了 Java 进程/线程,操作系统通常还有很多其他进程要调度。
标签: java multithreading operating-system