gpt4 book ai didi

Java 程序仅适用于 Netbeans 中的断点

转载 作者:行者123 更新时间:2023-12-02 08:34:30 26 4
gpt4 key购买 nike

我正在开发一个 Java 多线程程序,它使用共享数组在线程之间传递数据。它正在 Netbeans 6.7.1 中开发。

其中一个线程似乎只有在其中放置断点时才能工作,无论它在哪里。

在没有断点的 Debug模式下运行与在发布中运行的行为相同 - 预期的输出永远不会到达。

我无法判断问题发生在哪里,因为添加断点并按继续时,它会按预期工作。

如何缩小出现此问题的位置/原因?

示例代码:

result = utils.isBufferFull(AudioDuplex.voiceArray);
if(result == true) {
System.out.println("Taking copy");

voiceArray = AudioDuplex.voiceArray;//.clone();
utils.clearBuffer(AudioDuplex.voiceArray);

}

如果断点放置在第 2 行,则永远不会命中断点。第 3 行上的断点将被命中,预期的输出将到达。

最佳答案

如果没有更长的代码示例,就不可能准确判断出问题所在,但根据我的经验,这种行为是未识别的生产者-消费者问题的典型行为(请参阅 http://en.wikipedia.org/wiki/Producer-consumer_problem )。

基本上,可能发生的情况是,当消费者线程请求数据时,生产者线程没有可用的数据。基本的解决方案是保留一个信号量(据我所知,java中有一个信号量类)。生产者收到数据后会发布数据,消费者则等待生产者发布数据。

您在断点处看到的是您将消费者线程停止了足够长的时间,以便生产者可以提供一些东西。当你不中断时,消费者正常运行,并在生产者有任何东西之前退出。

关于Java 程序仅适用于 Netbeans 中的断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com