jvm的问题,求大神指点

wenqier 2015-01-16 11:25:39
class Test
{
private static boolean done;
public static void main(String[] args)
{
System.out.println(done);
new java.lang.Thread (new Runnable(){
public void run() {
while (!done)
{
//这段代码不注释掉不会死循环,注释掉后,会进入循环,除非,在结尾使用System.exit(0);关掉jvm,这是为什么
// System.out.println(1);

}
}
}).start();
try {
Thread.sleep(1000 * 5);
} catch (InterruptedException e) {
e.printStackTrace();
}
done = true;
System.out.println("this is end");
// System.exit(0);
}
}
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenqier 2015-01-17
  • 打赏
  • 举报
回复
引用 4 楼 cumtwyc 的回复:
[quote=引用 3 楼 cumtwyc 的回复:] done在线程工作栈内改变后没有刷新到主存中。
重新回答一下,main中修改的done刷新到主存了,但是另外一个线程中使用的还是之前拷贝的done的副本。[/quote]这个倒也是,这个倒是说的过去,1:不过一般我们main运行完,那个jvm不是关掉了么,咋这个还在呢,2:静态的是放在另一个地方的,不过为啥就不给刷行了
wenqier 2015-01-16
  • 打赏
  • 举报
回复
我的是1.7的,就是直接死循环了,那个eclipse的控制台的红点一直亮着,还有在cmd下也是一直处于运行状态
福来哥 2015-01-16
  • 打赏
  • 举报
回复
双核电脑,java 6版本通过测试,注释或不注释都可以正常退出。
wyc_ 2015-01-16
  • 打赏
  • 举报
回复
引用 3 楼 cumtwyc 的回复:
done在线程工作栈内改变后没有刷新到主存中。
重新回答一下,main中修改的done刷新到主存了,但是另外一个线程中使用的还是之前拷贝的done的副本。
wyc_ 2015-01-16
  • 打赏
  • 举报
回复
done在线程工作栈内改变后没有刷新到主存中。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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