首页 > 解决方案 > 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

因此,线程输出顺序可能不同,但不会混合在一起。看起来不对。这种行为可能是什么原因以及如何解决它(以随机顺序获取行)?

标签: javamultithreadingjava-threads

解决方案


System.out是基于缓冲区的,它不会刷新每条消息的流。

要弄乱它,请尝试手动冲洗它。

Thread threadWinter = new Thread(() -> IntStream.range(1, 4)
    .forEach((n) -> {
        System.out.println("Winter"); 
        System.out.flush();
    }));

推荐阅读