1

我有几个 SwingWorker 正在运行,它们都需要 OpenNLP 进行计算。OpenNLP 需要一些时间进行初始化,所以我想知道这样做的最佳方法是什么?我想在每个 SwingWorker 中启动一个 OpenNLP 实例并不明智。我可以初始化一个实例并将其传递给每个 SwingWorker,但问题是我可以/想要仅在 SwingWorkers 中而不是之前初始化 OpenNLP。

所以我想在一个循环中启动所有的工人,在启动后他们(或只是其中一个?)应该初始化 OpenNLP 的实例。当它准备好时,每个 Worker 都应该使用它。

我怎样才能做到这一点?

谢谢!

4

1 回答 1

4

让所有摇摆工作人员使用一个执行同步延迟初始化的工厂 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 回答