java - Java 线程被破坏
问题描述
我尝试运行几个线程,如下所示:
Thread threadWinter = new Thread(() -> IntStream.range(1, 4).forEach((n) -> System.out.println("Winter")));
Thread threadSpring = new Thread(() -> IntStream.range(1, 4).forEach((n) -> System.out.println("Spring")));
Thread threadSummer = new Thread(() -> IntStream.range(1, 4).forEach((n) -> System.out.println("Summer")));
Thread threadAutumn = new Thread(() -> IntStream.range(1, 4).forEach((n) -> System.out.println("Autumn")));
threadWinter.start();
threadSpring.start();
threadSummer.start();
threadAutumn.start();
每个运行输出如下所示:
Spring
Spring
Spring
Summer
Summer
Summer
Winter
Winter
Winter
Autumn
Autumn
Autumn
因此,线程输出顺序可能不同,但不会混合在一起。看起来不对。这种行为可能是什么原因以及如何解决它(以随机顺序获取行)?
解决方案
System.out
是基于缓冲区的,它不会刷新每条消息的流。
要弄乱它,请尝试手动冲洗它。
Thread threadWinter = new Thread(() -> IntStream.range(1, 4)
.forEach((n) -> {
System.out.println("Winter");
System.out.flush();
}));