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

标签 java multithreading netbeans

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

相关文章:

java - JSTL 中的 HashMap 键检查

java - 在 Activity 的JRE中找不到tools.jar-Spring Tools Suite

java - 从 XML 文件中删除元素 Java

twitter-bootstrap - 如何在 NetBeans 中使用 Bootstrap 框架?

java - 当我尝试运行 .jar 时,出现 java.library.path 中没有库的异常

java - 如何确定选择了哪个FileChooser ExtensionFilter - javafx

java - 如何异步删除文件

Java Swing 处理状态

java - java并发包是用锁实现的吗?

c# - “使用”语句与 'try finally'