<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沉睡森林@漂在北京

    本處文章除注明“轉載”外均為原創,轉載請注明出處。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      152 隨筆 :: 4 文章 :: 114 評論 :: 0 Trackbacks
      今天看到一段關于synchronized的小代碼,比較有意思。當將S1的static去掉,這個死鎖便解開了。其實也很好理解,線程1進入后鎖住S1,并且等待了500,在等待時線程2來了,鎖住了S2。線程1的500過了后接著鎖住S2開始下面的輸出,但是S2被線程2鎖住不放;同樣線程2鎖住了S2,接著去取S1的控制權,但是線程1卻握著不放。死鎖便產生了。S1和S2都是static關鍵字修飾,他們都是共享內存空間,去掉這個關鍵字,那么線程1和線程2鎖住的不是同一個對象了,問題也不會產生。每個對象都包含了一把鎖(也叫作“監視器”),它自動成為對象的一部分(不必為此寫任何特殊的代碼)。調用任何synchronized方法時,對象就會被鎖定,不可再調用那個對象的其他任何synchronized方法,除非第一個方法完成了自己的工作,并解除鎖定。

    package com.example.thread2;


    public class TestDeadLock implements Runnable {
        
    public int flag = 1;
        
    static Object S1 = new Object();
        
    static Object S2 = new Object();
        
    public String threadId;
        
    public TestDeadLock(String s){
            threadId 
    = s;
        }

        
    public void run() {
            System.out.println(threadId 
    + ":flag=" + flag);
            
    if (flag == 1) {
                
    synchronized (S1) {
                    
    try {
                        Thread.sleep(
    500);
                    } 
    catch (Exception e) {
                        e.printStackTrace();
                    }
                    
    synchronized (S2) {
                        System.out.println(
    "1");
                    }
                }
            }
            
    if (flag == 0) {
                
    synchronized (S2) {
                    
    try {
                        Thread.sleep(
    500);
                    } 
    catch (Exception e) {
                        e.printStackTrace();
                    }
                    
    synchronized (S1) {
                        System.out.println(
    "0");
                    }
                }
            }
        }

        
    public static void main(String[] args) {
            TestDeadLock td1 
    = new TestDeadLock("No.1");
            TestDeadLock td2 
    = new TestDeadLock("No.2");
            td1.flag 
    = 1;
            td2.flag 
    = 0;
            Thread t1 
    = new Thread(td1);
            Thread t2 
    = new Thread(td2);
            t1.start();
            t2.start();
        }
    }
    posted on 2009-03-12 20:57 王總兵 閱讀(264) 評論(1)  編輯  收藏 所屬分類: Spring

    評論

    # re: 關于synchronized的一段代碼 2009-03-12 20:58 王兵
    個人認為,隨著新的JDK發布,新的同步解決方案的提出,synchronized關鍵字會慢慢的淡出視線的。  回復  更多評論
      

    主站蜘蛛池模板: 久久精品国产亚洲| 亚洲精品午夜无码专区| 亚洲人成网站在线观看播放青青| 99re6在线视频精品免费| 无码专区一va亚洲v专区在线| 精品一区二区三区无码免费直播| 青青青国产免费一夜七次郎| 亚洲中文字幕久久精品蜜桃| 女人被弄到高潮的免费视频| 亚洲愉拍一区二区三区| 好吊妞在线成人免费| 国产成人综合久久精品亚洲| 夜色阁亚洲一区二区三区| 亚洲阿v天堂在线2017免费| 亚洲色精品88色婷婷七月丁香| 三年片在线观看免费| 亚洲国产精品久久久久网站 | 一区二区三区四区免费视频| 久久精品亚洲中文字幕无码麻豆| xx视频在线永久免费观看| 亚洲AV男人的天堂在线观看| 午夜国产大片免费观看| a毛片免费在线观看| 久久亚洲日韩看片无码| 女人毛片a级大学毛片免费| 春意影院午夜爽爽爽免费| 亚洲欧洲免费视频| 成人五级毛片免费播放| 一级毛片视频免费| 亚洲综合色丁香麻豆| 国产精品免费电影| 黄网站色视频免费在线观看的a站最新| 久久亚洲AV成人出白浆无码国产| 成人男女网18免费视频| 人妻巨大乳hd免费看| 少妇中文字幕乱码亚洲影视| 精品久久久久久久免费人妻| 国产精品免费在线播放| 亚洲国产日产无码精品| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲自偷自偷在线制服|