2012-07-25 136 views
0

我正在使用eclipse進行遠程調試。我的要求是同時發出20個請求,使用調試斷點停止一個點,然後同時釋放所有暫停的線程,以測試多線程在同一時間訪問代碼時代碼的行爲方式。但是,當我嘗試這樣做時,我發現只有一個線程正在提供所有請求 守護線程[http-0.0.0.0-8080-Processor60](暫停(VcsInfoDAO中第440行的斷點))在多線程環境下在eclipse中進行遠程調試

當第一個請求完成時,那麼只有第二個請求來到上面提到的同一個線程提供的斷點。在eclipse中是否有任何設置使得所有請求都到達單一點,然後以某種方式同時釋放線程,以便所有線程同時訪問代碼。

任何幫助將高度讚賞。

蘇拉布

回答

0

Eclipse與你所看到的沒有任何關係。如果你在一個應該同時調用的方法內的某個地方設置斷點,並且如果你的客戶端代碼真的啓動了20個併發請求,並且如果你觀察到第二個請求只在第一個請求完成後才被處理,那麼你的想法併發不是。

我看到兩種可能的解釋:

  • 你有一個獨特的線程處理所有的請求。如果多個請求同時發送,則所有請求都會排隊並逐個處理
  • 您有幾個線程併發處理請求,但客戶端代碼順序發送20個請求,而不是併發發送20個請求。

無論如何,使用斷點來測試這樣的事情並不是一個好的解決方案。您必須點擊20個線程中的每個線程的「繼續(F8)」按鈕,因此它們不會同時重新啓動。你會貝特使用CountDownLatch初始化在20做到這一點:

private CountDownLatch latch = new CountDownLatch(20); 

public void run() { 
    // some code 
    // here we want to pause all 20 threads and restart them all at the same time 
    latch.countDown(); // The 20th thread will open the barrier, and they will all restart at the same time 
    latch.await(); 
} 
+0

,我調試這個盒子是應該處理在同一時間多個請求生產箱。使用eclipse遠程調試時,當我把調試點,並打它10次。現在我的要求是停止所有請求並釋放流量,所有請求都應該同時進行。但在我的情況下,即使我打了10次服務器,我也只能一個接一個流。 – sourabh 2012-07-25 13:17:39