<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    中文JAVA技術(shù)平等自由協(xié)作創(chuàng)造

    Java專題文章博客和開源

    常用鏈接

    統(tǒng)計

    最新評論

    關(guān)于使用JAVA單例的問題分析

      這個問題由最開始使用JACKSON JSON而衍生出來,因為官網(wǎng)上建議將ObjectMapper作為全局變量使用從而提高效率,所以,我們項目里面使用了單例,在使用單例的時候,我們無可厚非的考慮了資源在使用時是否要保證互斥的情況。

      最開始的寫法:

      Java代碼

      public final class JacksonJsonMapper {

      static volatile ObjectMapper objectMapper = null;

      private JacksonJsonMapper(){}

      public static ObjectMapper getInstance(){

      if (objectMapper==null){

      objectMapper = new ObjectMapper();

      }

      return objectMapper;

      }

      }

      在此期間,我考慮了兩個問題,并與團隊中的另外一個兄弟發(fā)生了激烈的討論:

      1、在使用getInstance()方法的時候,是否要使用synchronized關(guān)鍵字。

      2、在使用objectMapper.writeValueAsString(object)時,因為此方法非靜態(tài)方法,在此方法內(nèi)是否會使用到對象自有的屬性,而在并發(fā)的時候出現(xiàn)前者屬性被后者覆蓋的問題。

      后再看了源碼后,排除了第二個顧慮,ObjectMapper是與線程綁定的,所以是線程安全的,并且也在官網(wǎng)的線程安全介紹中得到了證實托福代考 托福答案

      Jackson follows thread-safety rules typical for modern factory-based Java data format handlers (similar to what, say, Stax or JAXP implementations do). For example:

      Factories (ObjectMapper, JsonFactory) are thread-safe once configured: so ensure that all configuration is done from a single thread, and before instantiating anything with factory.

      Reader/writer instances (like JsonParser and JsonParser) are not thread-safe -- there is usually no need for them to be, but if for some reason you need to access them from multiple threads, external synchronization is needed

      All transformer objects (custom serializers, deserializers) are expected to be stateless, and thereby thread safe -- state has to be stored somewhere outside instances (in ThreadLocal or context objects passed in, like DeserializationContext).雅思代考 雅思答案

      第一個顧慮在看完下面這篇文章后,得到了解決方法:

      Java代碼

      public final class JacksonJsonMapper {

      static volatile ObjectMapper objectMapper = null;

      private JacksonJsonMapper(){}

      public static ObjectMapper getInstance(){

      if (objectMapper==null){

      synchronized (ObjectMapper.class) {

      if (objectMapper==null){

      objectMapper = new ObjectMapper();

      }

      }

      }

      return objectMapper;

      }

      }

      文章中詳細說明了關(guān)鍵字 volatile 是在讀取所申明的對象時,會要從內(nèi)存中進行同步,但是不會對寫時起作用,所以,還是需要synchronized 關(guān)鍵字的配合。

    posted on 2013-03-12 20:39 好不容易 閱讀(348) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    PK10開獎 PK10開獎
    主站蜘蛛池模板: 亚洲人成7777| 亚洲国产最大av| 国产99久久久久久免费看| 午夜网站免费版在线观看| 在线aⅴ亚洲中文字幕| 免费中文熟妇在线影片| 一区二区亚洲精品精华液 | 亚洲人成网站18禁止| 猫咪社区免费资源在线观看| 亚洲人成人77777在线播放| 动漫黄网站免费永久在线观看| 国产91在线|亚洲| 美女黄网站人色视频免费国产 | 97se亚洲综合在线| 成人免费视频网站www| 亚洲kkk4444在线观看| 国产国产人免费人成免费视频| 日韩一区二区三区免费播放| 中文字幕专区在线亚洲| 久久久久久久99精品免费观看| 香蕉视频在线观看亚洲| 野花高清在线观看免费3中文| 亚洲精品色播一区二区| 亚洲人成无码久久电影网站| 久久精品免费一区二区三区| 亚洲图片校园春色| 国产一级淫片a视频免费观看| 国产成人1024精品免费| 亚洲短视频男人的影院| 一个人免费高清在线观看| 青草久久精品亚洲综合专区| 日本亚洲国产一区二区三区| 84pao强力永久免费高清| 四虎必出精品亚洲高清| 中文字幕精品亚洲无线码一区| 亚洲精品在线免费看| 全部一级一级毛片免费看| 亚洲综合综合在线| 日韩精品电影一区亚洲| 8888四色奇米在线观看免费看| 在线观看亚洲专区|