java并發學習之二:線程池(二)

          Posted on 2011-03-24 09:44 snake 閱讀(97) 評論(0)  編輯  收藏
          在看書的時候看到了一個觀察死鎖的工具TDA(Thread Dump Analysis)
          看了半天,才知道這玩意兒需要由jvm產生一個Thread Dump
          這個Thread Dump跟之前看到的Heap Dump也不是一回事
          windows下是ctrl+break觸發,unix下是ctrl+\或者kill -QUIT pid觸發
          默認是輸出到System.out,當然,你可以重定向的

          還有一個簡單方便快捷的方法:Java VisualVM,并且Java VisualVM中還提供了TDA的插件下載

          太深入的現在還沒這水平,在之前的代碼調試中用了一下
          之前的代碼中有這樣一個錯誤
          void waitThread(Thread t) throws InterruptedException
          	{
          		synchronized(this)
          		{		
          			freeThread.add((ThreadNode) t);
          			busyThreadsNum.decrementAndGet();
          			synchronized(t)
          			{
          				t.wait();					
          			}
          		}
          	}
          
          

          很明顯,問題是鎖住了pool的固有鎖,然后等待
          這是一個Java VisualVM的一個界面

          只要簡單地點擊“線程 Dump”,就能得到一個線程Dump了,然后用TDA查看一下線程池0-9的狀態



          可以看到,上鎖,然后等待,還有在這問題出現在哪一行,都明晰了



          已有 0 人發表留言,猛擊->>這里<<-參與討論


          ItEye推薦




          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 睢宁县| 松桃| 陆丰市| 舟山市| 阳曲县| 贵南县| 曲松县| 抚州市| 丹寨县| 桓仁| 济源市| 大竹县| 娄底市| 定日县| 田东县| 通山县| 沛县| 临汾市| 寻甸| 台江县| 耒阳市| 宣城市| 顺平县| 天气| 永宁县| 云龙县| 利津县| 西藏| 犍为县| 新建县| 静安区| 河源市| 敖汉旗| 酒泉市| 土默特右旗| 盖州市| 台前县| 来安县| 开平市| 论坛| 朝阳市|