使用线程,我有一个主体类(SlaveCrawler)实例化了三个相互依赖的类(Downloader, ContentAnalyzer, URLAnalyzer)。
SlaveCrawler使用DownloaderURLAnalyzerDownloader使用ContentAnalyzerURLAnalyzerContentAnalyzer使用URLAnalyzer
我只希望每个类有一个实例。如果我使用Singleton,我可以得到这个,但是使用线程,我将有20个SlaveCrawlers(示例),所以我想要20个URLAnalyzer

可以使用Singleton进行设置,还是我需要其他方式?

最佳答案

看一看ThreadLocal。每个线程将具有每个对象自己的本地副本。

ThreadLocal<YourObject> threadLocalYourObject = new ThreadLocal<YourObject>() {
  @Override
  protected YourObject initialValue() {
    //initialize YourObject
  }
}

或者在1.8中,我们可以使用:
ThreadLocal<YourObject> threadLocalYourObject = ThreadLocal.withInitial( () -> new YourObject() )

要访问您的ThreadLocal对象,请使用get()方法。
YourObject yourObject = threadLocalYourObject.get();

09-26 03:51