Android開發之SimpleDateFormat線程安全ThreadLocal

SimpleDateFormat為非線程(Thread)安全, 多線程時會造成問題。

方法一:
直接用static
缺點:不同線程的安全性(皆能共享)

方法二:
使用時才new一個
缺點:消耗內存, 影響效能

方法三:
最推薦的方式為透過ThreadLocal

ThreadLocal可根據不同線程, 存取不同的值,
舉個例子:

        final int num = 10;
        final ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
        threadLocal.set(num);
        Log.e("adam", "test, 1, get: " + threadLocal.get());
        new Thread(new Runnable() {
            @Override
            public void run() {
                threadLocal.set(20);
                Log.e("adam", "test, 2, get: " + threadLocal.get());
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.e("adam", "test, 3, get: " + threadLocal.get());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.e("adam", "test, 4, get: " + threadLocal.get());
                    }
                });
            }
        }).start();

結果:
test, 1, get: 10
test, 2, get: 20
test, 3, get: null
test, 4, get: 10

Thread中沒設值時, 取出的是null, UIThreadhread設的是10, 並沒有因為第一個Thread設值20而改變, test 4依然是10。

由此可確認,ThreadLocal的存取是獨立於不同線程。

SimpleDateFormat透過ThreadLocal:

    private static final ThreadLocal<DateFormat> dateFormatThreadLocal = new ThreadLocal<DateFormat>();
    private static DateFormat getDateFormat(String format){
        DateFormat dateFormat = dateFormatThreadLocal.get();
        if(dateFormat == null){
            dateFormat = new SimpleDateFormat(format);
            dateFormatThreadLocal.set(dateFormat);
        }
        return dateFormat;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 自然衝擊療法由丁愚仁老師發明,又稱「禪拍」,「拍打」,"自然拍打"。 丁師及其團隊總結經驗,不同的各種病症(含絕症...
    YouAreMyMusic阅读 2,313评论 0 4
  • 《達爾文所未知的》解說詞 撰寫(Written):阿爾芒·馬裏耶(The Animal Mother) 翻譯(Tr...
    JENTSON阅读 1,485评论 0 1
  • The Art of Jumping Time Lines跳躍時間線的藝術 A Hathor Planetary ...
    愉悦的Gil阅读 983评论 0 4
  • 程序員創業白皮書 作者:Paul Graham Paul Graham是程序員,專欄作家。他在1995年創建了第一...
    刘立山John阅读 1,999评论 0 20
  • 有知识不一定改变命运,但是没有知识一定改变不了命运。只要你还在努力,人生就有无穷的可能。和时间竞争,在概率中突围,...
    筱喆阅读 166评论 0 0