我正在使用Java中的多線程程序,它使用共享數組在線程之間傳遞數據。它正在Netbeans 6.7.1中開發。Java程序僅適用於Netbeans中的斷點
其中一個線程似乎只有在放置斷點時才起作用,它並不重要。
在沒有斷點的調試模式下運行的行爲與在發行版中運行相同 - 預期的輸出永遠不會到達。
我不知道問題出在哪裏,因爲添加斷點的時刻,我按下繼續,它按預期工作。
如何縮小發生此問題的位置/原因?
示例代碼:
result = utils.isBufferFull(AudioDuplex.voiceArray);
if(result == true) {
System.out.println("Taking copy");
voiceArray = AudioDuplex.voiceArray;//.clone();
utils.clearBuffer(AudioDuplex.voiceArray);
}
如果一個斷點被放置在第2行,它永遠不會擊中。 第3行中的斷點將被擊中,預期的輸出將到達。
它被稱爲競爭條件 - 兩個線程正在以這樣一種方式進行交互,即只有當你放慢其中一個時,它纔會做你想要的。 – 2010-02-24 13:45:54
你使用什麼機制來同步對共享數組的訪問?您使用什麼機制將共享數據的更改通知給那些對這些更改感興趣的線程? – VoidPointer 2010-02-24 13:46:36
只是對代碼的評論......你不需要if語句中的「== true」。只是做「如果(結果){」 – Ascalonian 2010-02-24 14:24:51