m0_60329578 2021-12-15 19:17 采纳率: 66.7%
浏览 77
已结题

java中Debug 与 测试类运行结果不同

今天做了一个案例,生产者与消费者
public class BoxDemo {
    public static void main(String[] args) {
        Box b = new Box();

        Producer p = new Producer(b);

        Customer c = new Customer(b);

        Thread t1 = new Thread(p);
        Thread t2 = new Thread(c);


        t1.start();
        t2.start();

    }
}
public class Box {
    private int milk;
    private boolean state = false;

    public synchronized void put(int milk) {
        this.milk = milk;
        if (state) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
        System.out.println("送奶工将第" + this.milk + "瓶奶放入奶箱");
        state = true;
        notifyAll();
    }

    public synchronized void get() {
        if (!state) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("用户拿到第" + this.milk + "瓶奶");
        state = false;
         notifyAll();
    }
public class Customer implements Runnable {
    private Box b;

    public Customer(Box b) {
        this.b = b;
    }

    @Override
    public void run() {
        while (true) {
            b.get();
        }
    }
}


public class Producer implements Runnable {
    private Box b;

    public Producer(Box b) {
        this.b = b;
    }


    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            b.put(i);
        }
    }
}

运行结果及与Debug 结果不同

img

我想要达到的结果

Debug 的结果才是我想要的结果 找了半天没找到原因
求解答

  • 写回答

2条回答 默认 最新

  • 五一编程 2021-12-15 19:33
    关注

    应该是多线程没有处理好导致的,一半debug和release除了优化参数不一样外,都是一样的,因为debug加入了许多调试符号,所以执行可能会慢一点,结果正常,
    release执行的快些,所以结果就不对了,一般都是多线程导致的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月15日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)