gpt4 book ai didi

java - 在 Java 中,每个线程可能是 Singleton 吗?

转载 作者:太空狗 更新时间:2023-10-29 23:03:39 25 4
gpt4 key购买 nike

使用线程,我有一个主体类 (SlaveCrawler),它实例化了三个相互依赖的类 (Downloader、ContentAnalyzer、URLAnalyzer)。

SlaveCrawler 使用DownloaderURLAnalyzer

Downloader 使用 ContentAnalyzerURLAnalyzer

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();

关于java - 在 Java 中,每个线程可能是 Singleton 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com