2013-07-18 59 views
1

我有幾個SwingWorkers正在運行,他們都需要OpenNLP進行計算。 OpenNLP需要一些時間進行初始化,所以我不知道這樣做的最佳方式是什麼? 我想在每個SwingWorker中啓動一個OpenNLP實例並不明智。 我可以初始化一個實例並將其傳遞給每個SwingWorker,但問題是我只能在SwingWorkers中創建OpenNLP,而不是之前。具有相同Class的實例的Java SwingWorker?

所以我想在一個循環中啓動所有Worker並且在啓動之後他們(或者只是其中的一個?)應該初始化爲OpenNLP的實例。當它準備好時,每個工人都應該使用它。

我該怎麼做?

謝謝!

回答

4

讓所有工人擺動使用一個工廠bean,它同步延遲初始化:

public class OpenNLPFactory { 

    public synchronized OpenNLP getOpenNLP() { 
     if(OpenNLP ready) { 
      return it 
     } else { 
      build it and return it. 
    } 
    } 

} 

的OpenNLP返回的對象本身必須是線程安全的,當然...

+0

謝謝!不知道關於synchronized關鍵字:) – user2170547

相關問題