1

私はいくつかの SwingWorker を実行していますが、計算にはすべて OpenNLP が必要です。OpenNLP は初期化に時間がかかるので、これを行う最善の方法は何でしょうか? すべての SwingWorker で OpenNLP の 1 つのインスタンスを開始するのは賢明ではないと思います。1 つのインスタンスを初期化して、それをすべての SwingWorker に渡すことはできますが、問題は、OpenNLP を初期化できるのは SwingWorker だけであり、その前ではできないことです。

したがって、すべてのワーカーをループで開始し、開始後にそれら (またはそのうちの 1 つだけ?) が OpenNLP のインスタンスを初期化する必要があります。準備ができたら、すべてのワーカーがそれを使用する必要があります。

これどうやってするの?

ありがとう!

4

1 に答える 1

4

すべての swing ワーカーが、同期された遅延初期化を行う単一のファクトリ Bean を使用するようにします。

public class OpenNLPFactory {

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

}

もちろん、返される OpenNLP オブジェクト自体はスレッドセーフである必要があります...

于 2013-07-18T19:45:00.427 に答える