SimpleDateFormat 為什么不是線程安全的?
點擊關(guān)注公眾號,Java干貨及時送達
大家都說 SimpleDateFormat 不是線程安全的,到底哪里不安全呢?
來看 SimpleDateFormat 類的源碼注釋:

說的很清楚,SimpleDateFormat 不是線程安全的,多線程下需要為每個線程創(chuàng)建不同的實例。
不安全的原因是因為使用了 Calendar 這個全局變量:

在日期格式化的時候:

這個 time 就會出現(xiàn)多線程并發(fā)設(shè)置安全問題,比如 A 線程在執(zhí)行設(shè)置的時候,剛好被 B 線程搶先設(shè)置了,這樣時間不就錯亂了。
其實在阿里巴巴 Java 開發(fā)手冊中也規(guī)范的很清楚:

如何獲取這份完整手冊,可以關(guān)注公眾號:Java核心技術(shù),在后臺回復(fù):手冊。
解決方法:
其實在阿里巴巴 Java 開發(fā)手冊中也給出了答案,現(xiàn)在棧長再總結(jié)下:
1)盡量使用局部變量;
2)如果要使用全局變量,則需要加鎖格式化操作;
3)使用 ThreadLocal 進行線程隔離;
這個面試題摘自《Java技術(shù)棧》小程序中的面試題,覺得不錯,特別拿出來分享給大家,小程序中我還整理了相當(dāng)多的面試題及精選答案,一起來在線刷題吧。

版權(quán)申明:本文系公眾號 "Java技術(shù)棧" 原創(chuàng),原創(chuàng)實屬不易,轉(zhuǎn)載、引用本文內(nèi)容請注明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和知識產(chǎn)權(quán)。






關(guān)注Java技術(shù)棧看更多干貨

評論
圖片
表情

