[黑壳博客转载]debug模式和run模式运行结果不同

debug模式和run模式运行结果不同

本文由黑壳博客创作

本文来源debug模式和run模式运行结果不同

一篇一笑

这或许就是肿了的原因

20190826141720.jpg

正文

前些天群里朋友问,为什么debug 和run模式运行结果会不一样

我在这先以一篇代码为例,

public class Test {
    private volatile int inc = 0;
    
    public void increase(){
        inc++;
    }

    public static void main(String[] args) {
        final Test test = new Test();
        for (int i = 0; i < 10; i++) {
            new Thread(){
                @Override
                public void run() {
                    test.increase();
                }
            }.start();
        }

        while (Thread.activeCount() > 1){
            Thread.yield();
        }
        System.out.println(test.inc);
    }
}

一两句话就能让你懂

如果代码不做干预,多线程的执行结果是不稳定的。
debug模式因为idea会不断的抓取内存快照,会在一定程度上影响线程的调度,从而导致结果和普通模式有较明显的区别。

如果想更加了解Java调试体系可以参考这个系列文章

http://www.ibm.com/developerworks/cn/java/j-lo-jpda1

文章简单介绍了 JPDA 的三个模块以及它们如何和其它层次交互

  • JPDA 定义了一套如何开发调试工具的接口和规范。
  • JPDA 由三个独立的模块 JVMTI、JDWP、JDI 组成。
  • 调试者通过 JDI 发送接受调试命令。
  • JDWP 定义调试者和被调试者交流数据的格式。
  • JVMTI 可以控制当前虚拟机运行状态。
  • 除了标准实现,JPDA 还有许多开源实现供使用。
  • Java 调试工具的优点。

About

欢迎在评论写下你的程序员趣事~~

欢迎加入我们的小组织 ,大家都叫壳叔,期待你的到来。

欢迎关注公众号

微信公众号

这是我们的Group

黑壳家根据地 Q群:200408242

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值