Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          線程10--一個死鎖的例子

          Posted on 2009-06-02 21:41 啥都寫點 閱讀(394) 評論(0)  編輯  收藏 所屬分類: J2SE
          關鍵技術:
          • 當線程進入對象的synchronized代碼時,便占據了資源,直到它退出該代碼塊或者調用wait方法時,才釋放該資源,在此期間,其他線程將不能進入該代碼塊。
          • 當線程互相持有對方需要的資源時,會互相等待對方釋放資源,如果線程都不主動釋放占據的資源,將產生死鎖。

          package book.thread;

          /**
           * 一個線程死鎖的例子
           
          */
          public class DeadLock {
              
          public static void main(String[] args) {
                  
          // 2個資源
                  final Object resource1 = "resource1";
                  
          final Object resource2 = "resource2";
                  
          // 第一個線程,想先占有resource1,再嘗試著占有resource2
                  Thread t1 = new Thread() {
                      
          public void run() {
                          
          //嘗試占有了resource1
                          synchronized (resource1) {
                              
          //成功占有resource1
                              System.out.println("Thread 1: locked resource 1");
                              
          //休眠一段時間
                              try {
                                  Thread.sleep(
          50);
                              } 
          catch (InterruptedException e) {
                              }
                              
          // 嘗試著占有resource2,如果不能占有,該線程會一直等待
                              synchronized (resource2) {
                                  System.out.println(
          "Thread 1: locked resource 2");
                              }
                          }
                      }
                  };

                  
          // 第二個線程,想先占有resource2,再占有resource1
                  Thread t2 = new Thread() {
                      
          public void run() {
                          
          // 嘗試著占有resource2
                          synchronized (resource2) {
                              
          // 成功占有resource2
                              System.out.println("Thread 2: locked resource 2");
                              
          // 休眠一段時間
                              try {
                                  Thread.sleep(
          50);
                              } 
          catch (InterruptedException e) {
                              }
                              
          // 嘗試占有resource1,如果不能占有,該線程會一直等待
                              synchronized (resource1) {
                                  System.out.println(
          "Thread 2: locked resource 1");
                              }
                          }
                      }
                  };
                  
          // 啟動兩個線程
                  t1.start();
                  t2.start();
              }
          }


                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 康保县| 怀仁县| 万山特区| 苏尼特右旗| 乌海市| 乐都县| 清镇市| 太仓市| 乌恰县| 台北县| 吴川市| 汝阳县| 黑水县| 双桥区| 通城县| 苏尼特左旗| 师宗县| 眉山市| 龙海市| 措勤县| 灯塔市| 木里| 淮北市| 桃园县| 军事| 古田县| 远安县| 仁布县| 扶沟县| 桃园县| 兰州市| 鄂尔多斯市| 桃江县| 萨嘎县| 赤壁市| 鄂托克前旗| 嘉兴市| 河曲县| 宜良县| 土默特右旗| 洪泽县|