我正在开发一个 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/