获取和ThreadLocal的initialValues方法同步

时间:2011-09-26 10:07:30

标签: java synchronization thread-local

我遇到了ThreadLocal的get()和initialValue()方法同步的代码。

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

-Krishna。

3 个答案:

答案 0 :(得分:2)

我正在调查ThreadLocal initialValue()上的synchronized的相同用法。 Fakrudeen的答案包括一个Java 1.5缺陷的链接,其中synchronized关键字是为正在创建的多个对象解决的问题。它已在Java 1.6中修复

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

----------开始源---------- import java.util.ArrayList;

公共类ThreadLocalBug {     static 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答案的评论,但我没有足够的分数:-))

答案 1 :(得分:1)

答案 2 :(得分:0)

不,这完全没有意义,很可能是由一个不知道自己在做什么的人写的。