我在一次学习多线程的过程中,遇到了一个奇怪的现象,后面的打印代码跑到前面去执行了,至今我都未找到原因。废话不多说,直接贴代码

这是我的代码,按理说,打印顺序应该是这样的

All tasks finished!

111

-0

集合内容:{a=123456, b=345123}

但结果却不是,结果如下图

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author lmq
 * @version 1.0
 * @datetime 2025/3/25 21:44
 **/
public class Test {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("All tasks finished!");
        System.err.println(111);
        Map<String,String> stringMap = new ConcurrentHashMap<>();
        new Thread(() -> {
            stringMap.put("a","123456");
        },"t1").start();
        new Thread(() -> {
            stringMap.put("b","345123");
        },"t2").start();
        int i = 0;
        while(stringMap.keySet().size() != 2){
            System.err.print("-"+i++);
        }
        System.out.println("集合内容:" + stringMap);
    }
}

我试过JDK8和JDK17都会有这个问题

下面是我的JDK版本号截图

有知道原因的大神欢迎留言