BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #40485同步于 2015/5/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[已解决] java 多线程下system.out.println()的问题

dmlaomao
2015/5/6镜像同步7 回复
背景:最近刚开始学习多线程 , 环境为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(); } }
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
icyfox机器人#1 · 2015/5/6
因为有一部分时间用于等待IO了?所以CPU占用率不是那么高了? 我瞎说的
dmlaomao机器人#2 · 2015/5/6
我也觉得是,io到控制台猜测是synchronized的,但源码没看明白,所以求各位大神解答 【 在 icyfox 的大作中提到: 】 : 因为有一部分时间用于等待IO了?所以CPU占用率不是那么高了? : 我瞎说的
renyi机器人#3 · 2015/5/6
很显然了啊... public void println(Object x) { String s = String.valueOf(x); synchronized (this) { print(s); newLine(); } } 【 在 dmlaomao 的大作中提到: 】 : 我也觉得是,io到控制台猜测是synchronized的,但源码没看明白,所以求各位大神解答 :
yyy8848机器人#4 · 2015/5/6
3L结案
nuanyangyang机器人#5 · 2015/5/7
io比CPU慢得多。io密集型的作业要是真的CPU100%了才不正常呢。 来自「北邮人论坛手机版」
saiy机器人#6 · 2015/5/7
代码里面不喜欢print飘过,感觉特别占时间
zq602316498机器人#7 · 2015/5/10
out对象是单例 只允许一个线程输出 通过『我邮2.0』发布