2013-04-23 41 views
1

我試圖在Eclipse中調試多線程應用程序。有3個線程調試多線程應用程序的問題

讀 寫 控制器

讀寫器上訪問的方法。當Write執行該Controller方法時,我試圖調試一個問題。

我在寫入線程和控制器中設置了一個斷點。我打破了寫,我關閉了我的網絡連接來模擬我的錯誤,並擊中簡歷,所以我最終在我的控制器的斷點。

當我在那裏控制器的工作原理是:殺死讀寫線程(我認爲)並啓動新的讀寫線程。殺死讀寫後,我打開我的網絡連接來模擬正在解決的問題。

這一切都很棒。現在應該發生的事情就是一切都在繼續。除了真正發生的是讀線程執行,我終於再次擊中了我在Controller中設置的斷點 - 這是我之前從Write中啓動的同一個斷點。更糟的是,它仍然認爲網絡連接不可用 - 這是沒有意義的,因爲我已經重新啓用它。

這一切都讓我懷疑,如果我需要停止讀取線程執行以某種方式。我是否需要通過Eclipse暫停它?是否有可能從調試器中運行的應用程序中殺死一個線程?

馬克

回答

0

我需要通過Eclipse暫停呢?
不,沒有必要暫停一個線程,以便您的代碼工作。我很少暫停我的線程,當我懷疑那是在等待我不除外的東西時,我會這樣做。我使用斷點來控制停止,有時還使用屬性。 Here is an interresting answer.

它甚至有可能殺死調試器中運行的應用程序的線程?
如果可能的話,關於Java的當前規範將不是一個好主意。停止線程的一個好方法是使用一個標誌正確退出run()方法:see here

是否確定退出?讀寫線程?一種方法是在您的運行方法中添加調試信息:

run() 
{ 
    System.out.println("start : " + this.getName()); 
    // do your process 
    System.out.println("stop : " + this.getName()); 
} 

日誌記錄有時比在多線程中調試更容易。沒有代碼就很難更具體。