日期:2014-05-20  浏览次数:20689 次

System.out.println()为什么会影响到多线程?
public class EvenCheckerEasy implements Runnable {

private static int val = 0;

@Override
public void run() {
while (true) {
++val;
++val;
System.out.println(val); // 在我电脑上测试,此处添加打印输出似乎防止了并发的产生,为什么?
if (val % 2 != 0) {
System.out.println(val + " not event!");
return;
}
}
}

public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
exec.execute(new EvenCheckerEasy());
}
exec.shutdown();
}
}
多线程

------解决方案--------------------
又是一个讨论离题的帖子,查下源代码就知道原因了。

public void println(int x) {
synchronized (this) {
    print(x);
    newLine();
}
}