我在一次学习多线程的过程中,遇到了一个奇怪的现象,后面的打印代码跑到前面去执行了,至今我都未找到原因。废话不多说,直接贴代码
这是我的代码,按理说,打印顺序应该是这样的
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版本号截图
有知道原因的大神欢迎留言
评论区