使用线程,我有一个主体类(SlaveCrawler
)实例化了三个相互依赖的类(Downloader, ContentAnalyzer, URLAnalyzer
)。SlaveCrawler
使用Downloader
和URLAnalyzer
Downloader
使用ContentAnalyzer
和URLAnalyzer
ContentAnalyzer
使用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();