在路上

          路上有驚慌,路上有理想

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            28 Posts :: 1 Stories :: 10 Comments :: 0 Trackbacks

          1.迭代問題

            多線程環(huán)境下,迭代容易引起問題,如

            for(int i=0;i<v.size();i++){System.out.println(v.get(i))}

           解決辦法之一:

               客戶端加鎖

               for(int i=0;true;i++){

                             Sychronzied(v){

                                      if(i<v.size()){

                                           System.out.println(v.get(i)

                                       }

                         }

          },當(dāng)然這種也有問題,一旦程序可以重新設(shè)置元素位置,也會出錯。

          幸好有一種比較安全的辦法: copy遍歷對象

             Sychronzied(v){

                                  Object v_clone= copy(v);

                         }

               iterateV(v_clone);

          2.Singleton

             單例習(xí)慣的方式,采用延時初始化,

             public static A getInstance(){

                             if(null==instance){

                               instance=new A();

                          }

                       return instance

             }

            在多線程模式下,需要加鎖,來保證同步Sychronized(object){}。

          如果初始化對象并不占用太多資源,其實沒有必要加鎖,畢竟同步也是很耗資源的。取消延時初始化,priavte static final instance=new A();

          3.順序化資源

             順序化資源是避免死鎖的簡單的方式。

             死鎖:T1時間,線程A 擁有objA的鎖,請求objB的鎖。線程B擁有objB的鎖,請求objA的鎖。

           如: System.identityHashCode(objA)<System.identityHashCode(objB)

           或者:public sychronized add(A a){sychronized(a){//do something}}

          4.wait and notify

          為了防止等待-通知機制出現(xiàn)race condition,需要加sychronized

          race condition:objA在被wait之前已經(jīng)被另一線程objB 給notify 了, 之后的wait 會永久停止,并導(dǎo)致deadlock(死鎖),當(dāng)然,如果你確認(rèn)可以控制wait-notify很好,就不需要加了

          posted on 2010-10-28 11:45 阮步兵 閱讀(2009) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 延寿县| 德保县| 宣武区| 宁远县| 吉水县| 家居| 穆棱市| 慈利县| 惠来县| 贵州省| 镇巴县| 彰化县| 阿图什市| 沛县| 日照市| 丰都县| 蕲春县| 阆中市| 巨野县| 福清市| 怀仁县| 花莲县| 西宁市| 浦县| 奉新县| 合阳县| 宜州市| 铁力市| 普安县| 白沙| 龙岩市| 大足县| 吴堡县| 开原市| 绩溪县| 枞阳县| 周口市| 乃东县| 比如县| 佛坪县| 文山县|