while(true)为什么会出现不执行的情况?

胖到没有朋友 2020-01-09 11:00:25
为啥这个运行之后打印不出来结果,等他set完之后 我在while里面打断点发现进不去 ,在程序启动就在while里面打断点,会输出2222,谁能给个解释啊

package com.leetcode.demo;

import java.util.HashMap;
import java.util.Map;

public class AAA {
final Map map = new HashMap<>();

class CCC {
public void setNumber() {
System.out.println(map.containsKey("code"));
map.put("code", "2222");
System.out.println(map.containsKey("code"));
}
}
class BBB {
public void toCCC(AAA.CCC ccc) {
new Thread() {
@Override
public void run() {
try {
System.out.println("进入线程");
sleep(10000);
ccc.setNumber();
System.out.println("结束进入线程");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}
public void testCallBack() {
BBB bbb = new BBB();
CCC ccc = new CCC();
bbb.toCCC(ccc);
int code;
int i=0;
while (true) {
//System.out.println(++i);
if (map.containsKey("code")) {
code = Integer.parseInt(map.get("code") + "");
if (code == 2222) {
System.out.println(code);
break;
}
}
}
}
public static void main(String[] args) {
System.out.println("开始运行");
AAA aaa = new AAA();
aaa.testCallBack();
}
}


...全文
1519 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger王 2020-10-30
  • 打赏
  • 举报
回复
那个Map加个volatile试一下
liuyuntian775885 2020-01-09
  • 打赏
  • 举报
回复
你这个是两个线程,不同步,你把sleep(10000); 放在ccc.setNumber();下面,就可以看出来了
weixin_43869905 2020-01-09
  • 打赏
  • 举报
回复
啥意思 没看懂你想问什么

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧