java日期格式化以及執行緒安全問題解決

2021-09-02 16:24:40 字數 1150 閱讀 4524

首先格式化可以有很多種格式

******dateformat("yyyymmddhhmmss");//年月日小時分鐘秒

1、******dateformat是非執行緒安全的類,所以不能直接修飾為static。這會導致發生執行緒安全問題。

這個類在執行的時候是通過乙個calendar變數來儲存時間的,假如你定義為static的時候,那麼calendar也將是共享的變數,那麼多執行緒訪問的時候,比如對時間進行增加,執行緒1加到為12月5號,這個時候執行緒1還沒有執行完就被執行緒2執行了,執行緒2是加到為12月6號,執行緒2執行完後才輪到執行緒1繼續執行,這個時候就會發現你本意是通過執行緒加到12月6號的,結果發現執行完確實5號。就是產生了執行緒安全問題。

那麼怎麼解決呢?

第一:就是不把******format作為全域性變數,弄成區域性變數

第二:加執行緒安全鎖

第三:使用threadlocal,threadlocal 可以確保每個執行緒都可以得到單獨的乙個 ******dateformat 的物件,也就不會出現那種執行緒搶占導致的問題了

/**

* 使用threadlocal定義乙個全域性的******dateformat

*/private static threadlocal******dateformatthreadlocal = new threadlocal()

};//用法

string datestring = ******dateformatthreadlocal.get().format(calendar.gettime());

java日期格式化

日期格式化 這個比較簡單,不多說什麼了,一看便知。date date new date dateformat sdf new dateformat dateformat sdf1 new dateformat yyyy mm dd dateformat sdf2 new dateformat yyy...

java日期格式化

日期和時間模式 日期和時間格式由日期和時間模式 字串指定。在日期和時間模式字串中,未加引號的字母 a 到 z 和 a 到 z 被解釋為模式字母,用來表示日期或時間字串元素。文字可以使用單引號 引起來,以免進行解釋。表示單引號。所有其他字元均不解釋 只是在格式化時將它們簡單複製到輸出字串,或者在分析時...

java日期格式化

用法 dateformat dformat new dateformat yyyy mm dd hh mm ss.sss string currdate dformat.format new date system.out.println 現在的時間為 currdate1 補充 模式字母 摘自jdk...