2011-09-26 36 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的回答評論,但我沒有足夠的分數:-))