gpt4 book ai didi

Java - ThreadLocal 还是并发对象池?

转载 作者:行者123 更新时间:2023-11-30 06:10:57 25 4
gpt4 key购买 nike

哪种方法更适合访问非线程安全对象

使用 ThreadLocal 对象:

static final ThreadLocal<NonThreadSafeParser> PARSER_THREAD_LOCAL = new ThreadLocal<NonThreadSafeParser>() {
@Override
protected NonThreadSafeParser initialValue() {
return new NonThreadSafeParser();
}
};

void parse(String input) {
PARSER_THREAD_LOCAL.get().parse(input);
}

使用并发对象池:

static final ConcurrentObjectPool<NonThreadSafeParser> PARSER_POOL = new ConcurrentObjectPool<>();

void parse(String input) {
NonThreadSafeParser parser = PARSER_POOL.borrow();
try {
parser.parse(input);
} finally {
PARSER_POOL.release(parser);
}
}

或者您想提供的其他方法?

重要因素是:

  • 表现
  • 内存使用情况
  • 垃圾收集

一般来说,每种方法的优点缺点是什么?

它们之间有什么明显的区别吗?

谢谢。

编辑:

Concurrent Object Pool 的例子Kryo 使用的.

最佳答案

明显的区别当然是你有一个对象池,或者每个线程有一个专用对象。这会产生各种后果,例如 ThreadLocals 可以是完全有状态的,因为它们仅由单个线程使用。池化对象可以是有状态的,但仅限于线程 check out 期间。

Some people think ThreadLocals are evil即使他们不是,他们仍然要求您在使用它们时成为一个聪明的 cookie。对象池的优缺点在很大程度上取决于存储在其中的实际对象。

所以总而言之:这取决于并且它在某种程度上是基于意见的。我们又一次遇到了一个没有绝对答案的软件开发问题,尽管人们喜欢认为我们正在处理一门精确的科学。

关于Java - ThreadLocal 还是并发对象池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990264/

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