Java中的多线程线程局部变量与局部变量 1 年,4 月 Questions & Answers 1350 我们不能使用线程安全的局部变量而不是线程局部变量吗。 以及使用ThreadLocal的位置。请引用一些实际应用的例子
# 1 楼答案 一个典型的例子是SimpleDateFormat,它不是线程安全的。在多线程环境中,除其他外,有两个线程安全选项: private static ThreadLocal<SimpleDateFormat> fmtHolder = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("dd/MM/yyyy"); } }; private void method() { SimpleDateFormat fmt = fmtHolder.get(); } 或使用本地实例: private void method() { SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy"); } 前者效率更高,而后者更易于阅读和推理
# 2 楼答案 局部变量只能在声明它的函数或块中使用,当函数返回或块退出时,它就不再存在 当需要静态数据,但希望每个线程都有自己的副本时,可以使用ThreadLocal对象,通常从static变量或单例对象的实例变量引用
# 3 楼答案 线程局部变量在不同的线程中有不同的实例。这允许每个线程拥有自己的变量视图,该视图独立于其他线程看到的内容。“Plain”局部变量是单个实例,当以线程安全的方式访问时,所有线程中的值都相同
# 1 楼答案
一个典型的例子是
SimpleDateFormat
,它不是线程安全的。在多线程环境中,除其他外,有两个线程安全选项:或使用本地实例:
前者效率更高,而后者更易于阅读和推理
# 2 楼答案
局部变量只能在声明它的函数或块中使用,当函数返回或块退出时,它就不再存在
当需要静态数据,但希望每个线程都有自己的副本时,可以使用
ThreadLocal
对象,通常从static
变量或单例对象的实例变量引用# 3 楼答案
线程局部变量在不同的线程中有不同的实例。这允许每个线程拥有自己的变量视图,该视图独立于其他线程看到的内容。“Plain”局部变量是单个实例,当以线程安全的方式访问时,所有线程中的值都相同