隨筆-59  評論-31  文章-0  trackbacks-0
                死鎖是一個經典的多線程問題,因為不同的線程都在等待那些根本不可能被釋放的鎖,
          從而導致所有的工作都無法完成。假設有兩個線程,分別代表兩個饑餓的人,他們必須共享刀叉并輪流吃飯。
          他們都需要獲得兩個鎖:共享刀和共享叉的鎖。假如線程 "A" 獲得了刀,而線程 "B" 獲得了叉。
          線程 A 就會進入阻塞狀態來等待獲得叉,而線程 B 則阻塞來等待 A 所擁有的刀。
                
                讓所有的線程按照同樣的順序獲得一組鎖。這種方法消除了 X 和 Y 的擁有者分別等待對方的資源的問題。
            將多個鎖組成一組并放到同一個鎖下。前面死鎖的例子中,可以創建一個銀器對象的鎖。于是在獲得刀或叉之前都必須獲得這個銀器的鎖。
            將那些不會阻塞的可獲得資源用變量標志出來。當某個線程獲得銀器對象的鎖時,就可以通過檢查變量來判斷是否整個銀器集合中的對象鎖都可獲得。如果是,它就可以獲得相關的鎖,否則,就要釋放掉銀器這個鎖并稍后再嘗試。
            最重要的是,在編寫代碼前認真仔細地設計整個系統。多線程是困難的,在開始編程之前詳細設計系統能夠幫助你避免難以發現死鎖的問題。
          posted on 2012-12-10 10:54 RoyPayne 閱讀(349) 評論(0)  編輯  收藏 所屬分類: java并發
          <2012年12月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 屏东县| 龙陵县| 静安区| 绍兴市| 溧阳市| 石屏县| 巫山县| 密云县| 曲松县| 建湖县| 噶尔县| 白银市| 赤壁市| 皮山县| 永和县| 鄂尔多斯市| 酒泉市| 浏阳市| 合水县| 河北省| 凌海市| 锡林郭勒盟| 北海市| 明溪县| 鄂州市| 黑山县| 革吉县| 通许县| 潍坊市| 陈巴尔虎旗| 满城县| 贞丰县| 临猗县| 资中县| 北票市| 奉新县| 元阳县| 桐乡市| 长宁县| 平潭县| 揭阳市|