netty原始碼閱讀之效能優化工具類之FastThreadLocal的使用
阿新 • • 發佈:2018-12-13
先說明FastThreadLocal使用的效果。
1、比jdk原生的ThreadLocal的快
2、不同執行緒之間能保證執行緒安全
這是我們的使用者程式碼:
public class FastThreadLocalTest { private static FastThreadLocal<Object> threadLocal = new FastThreadLocal<Object>() { @Override protected Object initialValue() { return new Object(); } @Override protected void onRemoval(Object value) throws Exception { System.out.println("onRemoval"); } }; public static void main(String[] args) { new Thread(() -> { Object object = threadLocal.get(); // .... do with object System.out.println(object); threadLocal.set(new Object()); while (true) { threadLocal.set(new Object()); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); new Thread(() -> { Object object = threadLocal.get(); // ... do with object System.out.println(object); while (true) { System.out.println(threadLocal.get() == object); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }
我們建立了一個FastThreadLocal,然後在兩個不同的執行緒裡面做get,得到兩個不同的物件。
所以得出的結果是列印了兩個不同的物件。
後面及時在一個執行緒裡面修改threadLocal(也就是不停地set new Object物件),另外一個執行緒get到的物件還是和之前的相同。
所以證明了不同的執行緒,get set的時候不會有影響。