2011-09-26 37 views

回答

0

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

+0

有趣的是,Google的GWT(2.4)在同步块(位于AbstractRemoteServiceServlet.java中)中有ThreadLocal get(),但这是因为它可能会创建新的ThreadLocals方法(实际上在validateThreadLocalData()中)。 –

2

我正在调查的上ThreadLocal的初值同步的相同的使用()。 Fakrudeen的答案包括指向Java 1.5缺陷的链接,其中synchronized关键字是解决多个创建对象的解决方案。它已在Java 1.6中修复。

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

---------- BEGIN SOURCE ---------- import java.util.ArrayList;

public class ThreadLocalBug {static int INTT = 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; 
    } 
} 

}

END ---------- ----------来源

(我会加入这个为Fakrudeen的回答评论,但我没有足够的分数:-))