Jackson第三篇【ObjectMapper與多線程】

      前兩篇文章咱們一起學習了一下,Jackson的基本使用方法還記得第一篇文章我獲得一個ObjectMapper對象整得那麼麻煩 。還用用單例模式來獲取爲什麼不直接new?先看一個數據吧。

   我把咱們第二篇文章裏面的TestVo轉換成JsonCommonUtil.getMapperInstance(false);方式執行5次  平均耗時爲210毫秒,把false改成true以後9991.6毫秒

   這裏我不是想測試它的性能(後面我會寫一篇專門測試幾種JSON類庫性能的文章屆時應該會涉及到json-lib ,jackson ,Gson……等常用類庫 ),我的機器也不給力。我主要是想說明的是每次new ObjectMapper() 和 全局使用一個 性能上相差了 大概 47 倍。在這個時間就是金錢的世界47倍是什麼概念,一個系統得轉換多少次啊!

  那大家可能說了你直接全局唯一是的,何必浪費時間來寫一篇文章呢。別急,我來給大家解釋一下!畢竟它是全局的那麼在多線程情況下,併發情況下 它會是什麼情況呢?會不會弄亂我們的數據?數據是萬萬不能亂的,你有1000W存款銀行系統亂了一下 給你少個0  你會哭的很有節奏!

接下來看下jackson官方文當對ObjectMaper的解釋:Jackson's org.codehaus.jackson.map.ObjectMapper "just works" for mapping JSON data into plain old Java objects ("POJOs").引自:http://wiki.fasterxml.co/JacksonInFiveMinutes

 

ObjectMapper mapper = new ObjectMapper();//can reuse,share globally

 賣弄一下我可憐的英語: ObjectMapper 只用作把Json映射到PoJo  ,可用在全局重用。

 既然人家說了只是把Json映射到PoJo 可以全局使用,那咱們還有必要研究嗎?我感覺有必要!因爲我現在不知道他是否是線程安全的,畢竟數據第一。那麼接下來咱們就一起測試一下極端情況下他是否是線程安全的。

 我的測試思路是這樣的:可以使用多個線程 線程1Mapper已經映射某一個實體的時候讓線程一sleep 然後線程二執行。看看線程2轉換的結果是否正確,雖然有點不準確但是也能大概看出來是否是線程安全的。因爲代碼太多目前正在整理,等整理完畢我貼上代碼。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章