gpt4 book ai didi

java - Java 中 ThreadLocal 的真实用法

转载 作者:行者123 更新时间:2023-11-30 03:47:22 24 4
gpt4 key购买 nike

刚开始学习Java ThreadLocal类型。我能理解那些典型的例子,比如定义一个类,它有一个实例字段,声明为ThreadLocal;然后,在创建此类的对象后,我们将该对象传递给三个独立的线程,它们每个线程都有自己的共享对象副本。

我的问题可能很愚蠢,请原谅,为什么我们不创建与线程数量一样多的对象,这样它(也许)会达到相同的结果?

我已经阅读了有关使用 ThreadLocal 的 Hibernate 代码:

private static final ThreadLocal threadSession = new ThreadLocal();  

public static Session getSession() throws InfrastructureException
{
Session s = (Session) threadSession.get();
try
{
if (s == null) {
s = getSessionFactory().openSession();
threadSession.set(s);
}
}
catch (HibernateException ex)
{
throw new InfrastructureException(ex);
}
return s;
}

我可能的猜测是,首先,我们可能无法预测会有多少个线程;其次,假设将创建许多线程,那么为每个线程创建一个对象的成本非常高?

请专家们给我一些指导:)

最佳答案

Why don't we just create as many objects as how many threads there are, so it will (maybe) achieve the same result?

这需要了解有多少线程。更重要的是,它要求我们要么为对象提供足够的信息以了解它所在的线程,以便它可以检索其线程本地数据,要么我们在更高级别管理线程本地内容并将其传递给对象。 ThreadLocal 让我们以完全独立的方式完成此任务,并简化了对象接口(interface)和线程本地数据的管理。

ThreadLocal 是一个很好的工具,可以为我们处理所有脏活。

关于java - Java 中 ThreadLocal 的真实用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300627/

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