2011-02-28 32 views
0

感謝您的幫助和支持,我面臨一個問題,我有兩個線程,一個是定時器線程,另一個是文件讀取器線程。現在我的主程序正在調用這兩個線程。定時器線程在超時時中斷主程序,並且如果存在一些IO錯誤,則文件讀取器線程調用主線程。所以現在問題進入了,主程序必須知道是誰啓動了中斷,打印一些中斷狀態可以說。那麼我該如何實現這一目標呢?以下是我不想使用的幾件事情。設置中斷原因,同時中斷線程

  1. 其用於在超時設置一個標誌,另一個標誌IO誤差(由於我的主程序是巨大的,並具有幾個部分,我不能到處做這種檢查),其具有一個成員變量集合
  2. 每個線程與狀態代碼和主程序讀取中斷(我可以這樣做,但我仍然需要維護線程對象以獲取狀態,並且我的文件讀取器線程很多,所以我必須迭代每個線程以找到一箇中斷)。

我會很感激你的幫助,甚至除了中斷以外的其他方式也很好。

+0

程序?你想要在主程序中進行的任何處理結束嗎?爲什麼定時器或文件讀取線程不能生成輸出(或者,如果這是事件驅動程序,則將輸出發佈到事件處理線程)。我想我們需要更多關於程序架構的信息來提出任何建議。 – 2011-02-28 06:29:10

+0

信號如何? – 2011-02-28 06:36:17

+0

將輸出發佈到Even處理線程?嗯,實際上即時創建n個線程來執行併發文件操作,如果我期待他們每個輸出形式,那麼我必須等待每個線程輸出只有那麼我可以創建並觸發下一個線程,所以它dosent採取真正的多線程優勢並非如此。我需要的是我想創建這n個線程,如果有任何錯誤,他們應該回到我身邊,我需要哪個線程(說文件名)和什麼錯誤。順便說一下,我所指的主程序是事件處理線程在這裏。 – 2011-02-28 06:42:59

回答

0

我這樣做,通過聲明一個異常變量,然後我重新拋出異常,如果等待線程獲取該異常變量被設置中斷:你用計時器線程打斷主要的意思

IOException ioex; 

synchronized(lockObject) { 
    while(true) { 
     try { 
      lockObject.wait(); 
     } catch(InterruptedException e) { 
      if(ioex != null) { 
       throw ioex; 
      } 
     } 
     ... normal handling ... 
    } 
} 
+0

但是你的run()方法,dosent支持拋出任何異常,因爲它在Thread.run()中的聲明。那麼如何重新拋出? – 2011-02-28 06:48:40

+0

用代碼片段更新了線程.....謝謝 – 2011-02-28 07:05:28

+0

請讓我知道你是否需要更清晰.......... – 2011-02-28 10:42:29