曬太陽

          2012年11月23日

          java線程互鎖演示

           1 /**
           2  * 線程互鎖:線程td1得到obj1的鎖,線程td2得到了obj2的鎖,接著,線程td1在持有obj1的鎖的同時
           3  * 企圖得到obj2的鎖,而此時線程td2仍持有obj2的鎖,所以線程td1等待,而線程td2的行為也與線程td1相同
           4  * 因此就形成了死鎖
           5  */
           6 public class Client {
           7     public static void main(String[] args) {
           8         final Object obj1 = "test1";
           9         final Object obj2 = "test2";
          10         
          11         Thread td1 = new Thread(){
          12             public void run(){
          13                 synchronized(obj1){
          14                     System.out.println("td1得到了obj1的鎖");
          15                     try {
          16                         Thread.sleep(1000);
          17                     } catch (InterruptedException e) {
          18                         e.printStackTrace();
          19                     }
          20                     
          21                     synchronized(obj2){
          22                         System.out.println("td1企圖得到obj2的鎖");
          23                         
          24                         try {
          25                             Thread.sleep(1000);
          26                         } catch (InterruptedException e) {
          27                             e.printStackTrace();
          28                         }
          29                     }
          30                 }
          31             }
          32         };
          33         
          34 
          35         Thread td2 = new Thread(){
          36             public void run(){
          37                 synchronized(obj2){
          38                     System.out.println("td2得到了obj2的鎖");
          39                     try {
          40                         Thread.sleep(1000);
          41                     } catch (InterruptedException e) {
          42                         e.printStackTrace();
          43                     }
          44                     
          45                     synchronized(obj1){
          46                         System.out.println("td2企圖得到obj1的鎖");
          47                         
          48                         try {
          49                             Thread.sleep(1000);
          50                         } catch (InterruptedException e) {
          51                             e.printStackTrace();
          52                         }
          53                     }
          54                 }
          55             }
          56         };
          57         
          58         td1.start();
          59         td2.start();
          60     }
          61 
          62 }

          posted @ 2012-11-23 06:16 曬太陽 閱讀(364) | 評論 (0)編輯 收藏

          <2012年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 比如县| 临邑县| 蓬安县| 泗阳县| 华安县| 乾安县| 怀来县| 康马县| 丰镇市| 岳池县| 乌海市| 甘洛县| 潜江市| 棋牌| 揭阳市| 同仁县| 抚顺县| 永福县| 花莲市| 沽源县| 辽阳县| 台北县| 青铜峡市| 错那县| 开江县| 徐州市| 沁水县| 司法| 寿宁县| 融水| 汶上县| 山西省| 大连市| 沙洋县| 刚察县| 高邮市| 分宜县| 建阳市| 夏津县| 崇州市| 宽城|