1. 程式人生 > >netty原始碼閱讀之效能優化工具類之FastThreadLocal的使用

netty原始碼閱讀之效能優化工具類之FastThreadLocal的使用

先說明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的時候不會有影響。