java - ThreadLocal的synchronized的get和initialValues方法

标签 java synchronization thread-local

我遇到了一段代码,其中ThreadLocal的get()和initialValue()方法已同步。

我找不到同步这些方法的任何用处。如果我错了请纠正我。

-克里希纳。

最佳答案

我正在研究 ThreadLocalinitialValue() 上同步的相同用法。 Fakrudeen 的答案包括一个 Java 1.5 缺陷的链接,其中同步关键字是创建多个对象的解决方法。它已在 Java 1.6 中修复

如果您在 Java 1.5 中运行此测试(取自 Fakrudeen 的链接)并将结果与​​更高版本进行比较,您将发现在 1.6 及更高版本中不需要同步。

---------- 开始源 ---------- 导入java.util.ArrayList;

公共(public)类ThreadLocalBug { 静态 int COUNT = 8;

static ThreadLocal tl = new ThreadLocal() {
    protected Object initialValue() {
        System.err.println("initialValue called");
        ArrayList list = new ArrayList(COUNT);
        for (int i = 0; i < COUNT; i++) {
            MyThreadLocal mtl = new MyThreadLocal();
            mtl.get();
            list.add(mtl);
        }
        return list;
    }
};

public static void main(String[] args) throws Throwable {
    Object first = tl.get();
    Object second = tl.get();
    Object third = tl.get();
    System.err.println("first=" + first);
    System.err.println("second=" + second);
    System.err.println("second=" + third);
}

static class MyThreadLocal extends ThreadLocal {
    protected Object initialValue() {
        return Boolean.TRUE;
    }
}

}

---------- 结束源 ----------

(我会将此添加为 Fakrudeen 答案的评论,但我没有足够的积分:-) )

关于java - ThreadLocal的synchronized的get和initialValues方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553531/

相关文章:

java - Tesseract:在 hOCR 文件中获取单词置信度 (x_wconf)

android - 寻找有关 Android 同步管理器的信息

c# - ThreadLocal 性能与使用参数

c++ - 使 thread_local 变量完全易变

java - 大 float 奇怪的结果

java - 找不到 hibernate 属性

java - 为什么不能通过++在set方法中递增然后传递值

javascript - 调用两个 JS 函数并同步它们(snakeAnim 和 Animated Marker)

php - 如何将sqlite同步到远程mysql?

java - 在 Java EE 应用程序中使用弱引用