关于effective java2 第66条的程序

ss36290109 2012-08-28 02:14:56

这个是书上的程序,会无限循环下去。

public class Test {
private static boolean b;
private static int i = 1;

public static void main(String[] args) throws InterruptedException {

Thread thread = new Thread(new Runnable() {

@Override
public void run() {
while (!b) {
System.out.println(i);
}
}
});
thread.start();

TimeUnit.SECONDS.sleep(1);
b = true;
i = 2;
System.out.println(b);
}
}

这是我写的例子。会中止线程。
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ss36290109 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
恩,看到效果了。谢谢啊。


客气,要能健康退出,变量加上 volatile 关键字。书中应该有写,呵呵。
[/Quote]
还没看下去。就看到这个程序感觉和我以前写的不一样啊。就写了个例子。。又发了个这个帖子,哈哈。。
MiceRice 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
恩,看到效果了。谢谢啊。
[/Quote]

客气,要能健康退出,变量加上 volatile 关键字。书中应该有写,呵呵。
ss36290109 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
server模式启动是啥意思哦。


倒。。。不是Server模式启动,JVM是不会启用各种深度优化的,就看不到效果了;这是关键。

Server模式启动,就是在 JVM 参数中增加 “-server”参数,如果你用Eclipse,可以从Run里面配置下。
[/Quote]
恩,看到效果了。谢谢啊。
MiceRice 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
server模式启动是啥意思哦。
[/Quote]

倒。。。不是Server模式启动,JVM是不会启用各种深度优化的,就看不到效果了;这是关键。

Server模式启动,就是在 JVM 参数中增加 “-server”参数,如果你用Eclipse,可以从Run里面配置下。
ss36290109 2012-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
要用server模式启动,此外去掉 System.out.println(),也就是尽量消除线程需要切换环境的可能性。

应该就可以看到无限循环的效果了。
[/Quote]
去了syso还是会中止。。server模式启动是啥意思哦。
MiceRice 2012-08-28
  • 打赏
  • 举报
回复
要用server模式启动,此外去掉 System.out.println(),也就是尽量消除线程需要切换环境的可能性。

应该就可以看到无限循环的效果了。
scbb 2012-08-28
  • 打赏
  • 举报
回复
谢谢楼主分享。 要是能稍加解释就更好啦。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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