cuiyi's blog(崔毅 crazycy)

          記錄點(diǎn)滴 鑒往事之得失 以資于發(fā)展
          數(shù)據(jù)加載中……

          讀“Rails 2.2 新特性提示”的疑惑與解析

          今天在javaeye讀Rails 2.2 新特性提示 的時(shí)候,由于對(duì)于ROR沒有知識(shí)儲(chǔ)備和認(rèn)識(shí),所以對(duì)如下文產(chǎn)生了疑問
          Rails的ActionController是每次HTTP請(qǐng)求創(chuàng)建實(shí)例的,因此本身就支持多線程運(yùn)行;而ActiveRecord是單實(shí)例的,因此之前的版本不支持多線程。而Rails2.2改寫了ActiveRecord相應(yīng)的實(shí)現(xiàn),使得ActiveRecord是線程安全的了

          我的疑惑是
          而ActiveRecord是單實(shí)例的,因此之前的版本不支持多線程。
          -------------

          單實(shí)例,就意味著不能多線程么?
          public class SimpleSingleton {
            
          private static final SimpleSingleton instance = new SimpleSingleton ();
            
          public static getInstance(){return instance;}
          }
          這個(gè)怎么能不支持多線程呢?

          一直很疑惑,仔細(xì)想了想,慢慢推導(dǎo)
          從 single-thread 到 multi-thread 的難點(diǎn)在于thread security 

          而activerecord是單例,不支持multi
          -thread, 意味著它肯定有很多私有屬性從而是非線程安全的

          所以改進(jìn):
          1) 要么是改成每次創(chuàng)建新的
          2) 要不就是去掉私有變量,而以參數(shù)形式重新構(gòu)造 
           

          在看到文中
          使得ActiveRecord是線程安全的了

          從而印證了自己的想法,得解

          posted on 2008-10-27 23:20 crazycy 閱讀(1207) 評(píng)論(1)  編輯  收藏 所屬分類: JavaEE技術(shù)

          評(píng)論

          # re: 讀“Rails 2.2 新特性提示”的疑惑與解析  回復(fù)  更多評(píng)論   

          單實(shí)例,就意味著不能多線程么?

          回答:并不是說不可以單例,只是在多線程下會(huì)存在:Double-checked Locking的問題。如果A,B在調(diào)用單例的瞬間,存在競爭條件。引用下google工程師Bob Lee的代碼:
          public class Singleton{
          static class SingletonHolder{
          static Singleton instance=new Singleton();
          }

          public static Singleton getInstance(){
          return Singleton.instance();
          }
          }
          2008-10-29 08:34 | yeshucheng
          主站蜘蛛池模板: 巴林右旗| 阳原县| 鹤峰县| 密山市| 团风县| 页游| 平度市| 长治县| 九寨沟县| 高青县| 体育| 龙口市| 汶川县| 吴旗县| 略阳县| 安国市| 安阳市| 醴陵市| 汕头市| 洛南县| 稻城县| 清丰县| 杭州市| 出国| 麻江县| 望城县| 新绛县| 尚义县| 安宁市| 文登市| 和田县| 赤水市| 横峰县| 福清市| 平安县| 巴林左旗| 武汉市| 彰化市| 左权县| 齐齐哈尔市| 四子王旗|