返回信息流背景:最近刚开始学习多线程 , 环境为debian,机器4核 i5
问题:
run()函数中写一个while(true)的话,4个线程 cpu利用率能达到400%, 很正常
但如果在while 内加一句system.out.println(“something”)的话,4个线程 cpu利用率也就40%
求教各位大神原因,不胜感激
附代码
import java.util.*;
public class test implements Runnable {
public void loopForever() {
while(true) {
//此处加上system.out.println() cpu利用率就会由400%下降到 45%
}
}
public void run() {
loopForever();
}
public static void main(String[] args) {
test t1 = new test();
test t2 = new test();
test t3 = new test();
test t4 = new test();
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
Thread thread3 = new Thread(t3);
Thread thread4 = new Thread(t4);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #40485同步于 2015/5/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[已解决] java 多线程下system.out.println()的问题
dmlaomao
2015/5/6镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
我也觉得是,io到控制台猜测是synchronized的,但源码没看明白,所以求各位大神解答
【 在 icyfox 的大作中提到: 】
: 因为有一部分时间用于等待IO了?所以CPU占用率不是那么高了?
: 我瞎说的
很显然了啊...
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
【 在 dmlaomao 的大作中提到: 】
: 我也觉得是,io到控制台猜测是synchronized的,但源码没看明白,所以求各位大神解答
: