java中SimpleDateFormat線程不安全的示例分析

這篇文章主要為大家展示了“java中SimpleDateFormat線程不安全的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java中SimpleDateFormat線程不安全的示例分析”這篇文章吧。

鄂倫春網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

java.text.SimpleDateFormat主要負(fù)責(zé)日期的轉(zhuǎn)換與格式化。如:

java中SimpleDateFormat線程不安全的示例分析
編寫一個簡單的測試程序,如:

java中SimpleDateFormat線程不安全的示例分析

但是,在多線程的環(huán)境中,使用類java.text.SimpleDateFormat容易造成數(shù)據(jù)轉(zhuǎn)換及處理的不正確,因?yàn)樵擃惒⒉皇蔷€程安全的。

我們可以從SimpleDateFormat類的javadoc描述中看到如下一句話:

 Date formats are notsynchronized.

 It is recommended to create separate format instances for each thread.

 If multiple threads access a format concurrently, it must be synchronized externally.

Date formats沒有同步。

建議為每一個線程創(chuàng)建獨(dú)立的format對象。

如果多個線程并發(fā)訪問一個format,那么,一定要在外部實(shí)現(xiàn)同步(synchronized)。

也就是說,在多線程下我們需要做些額外的保護(hù)措施,去保證其正確處理,否則是不安全的。接下來,讓我們一起來看一下,多線程中到底會發(fā)生什么?

線程不安全示例

java中SimpleDateFormat線程不安全的示例分析

java中SimpleDateFormat線程不安全的示例分析

運(yùn)行結(jié)果主要包含如下幾個錯誤:

  • 無異常,日期解析出現(xiàn)錯誤

java中SimpleDateFormat線程不安全的示例分析

  • 有異常,java.lang.NumberFormatException

如,

java中SimpleDateFormat線程不安全的示例分析

再如,

java中SimpleDateFormat線程不安全的示例分析

那么問題來了,如何保證運(yùn)行正常呢?

解決方法

其實(shí),從SimpleDateFormat的javadoc中已經(jīng)看到有處理的方法了。

 Date formats are notsynchronized.

 It is recommended to create separate format instances for each thread.

 If multiple threads access a format concurrently, it must be synchronized externally.

接下來,先從這個描述信息給出相關(guān)的解決方法。

(一)每次都新建SimpleDateFormat對象

改造SimpleDateFormatExample類,如:

java中SimpleDateFormat線程不安全的示例分析

執(zhí)行上述Main.java類,得到正確結(jié)果:

java中SimpleDateFormat線程不安全的示例分析

(二) 訪問format時,添加synchronized

改造SimpleDateFormatExample類,如:

java中SimpleDateFormat線程不安全的示例分析

或者在使用format對象的方法前添加synchronized修飾,如:

java中SimpleDateFormat線程不安全的示例分析

同樣,執(zhí)行上述Main.java類,可以得到正確結(jié)果:

java中SimpleDateFormat線程不安全的示例分析

(三)使用TheadLocal

改造SimpleDateFormatExample類,如:

java中SimpleDateFormat線程不安全的示例分析

同樣,執(zhí)行上述Main.java類,可以得到正確結(jié)果:

java中SimpleDateFormat線程不安全的示例分析

(四)使用FastDateFormat

FastDateFormat類在Apache Common Langs包下面,

 該類是線程安全的。

如果是Maven工程,其添加依賴包如下:

java中SimpleDateFormat線程不安全的示例分析

改造SimpleDateFormatExample類,如:

java中SimpleDateFormat線程不安全的示例分析

完整的類為:

java中SimpleDateFormat線程不安全的示例分析

同樣,執(zhí)行上述Main.java類,可以得到正確結(jié)果:

java中SimpleDateFormat線程不安全的示例分析

(五)使用Joda Time

DateTimeFormatter 類Joda-Time包下面, 該類是線程安全的。

如果是Maven工程,其添加依賴包如下:


java中SimpleDateFormat線程不安全的示例分析

改造SimpleDateFormatExample類,如:

java中SimpleDateFormat線程不安全的示例分析

同樣,執(zhí)行上述Main.java類,可以得到正確結(jié)果:

java中SimpleDateFormat線程不安全的示例分析

以上是“java中SimpleDateFormat線程不安全的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享名稱:java中SimpleDateFormat線程不安全的示例分析
文章來源:http://bm7419.com/article46/geejeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、全網(wǎng)營銷推廣做網(wǎng)站、商城網(wǎng)站、營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司