在看書的時候看到了一個觀察死鎖的工具TDA(Thread Dump Analysis)
          看了半天,才知道這玩意兒需要由jvm產(chǎn)生一個Thread Dump
          這個Thread Dump跟之前看到的Heap Dump也不是一回事
          windows下是ctrl+break觸發(fā),unix下是ctrl+\或者kill -QUIT pid觸發(fā)
          默認(rèn)是輸出到System.out,當(dāng)然,你可以重定向的

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

          太深入的現(xiàn)在還沒這水平,在之前的代碼調(diào)試中用了一下
          之前的代碼中有這樣一個錯誤
          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的狀態(tài)



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



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


          ItEye推薦




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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 北安市| 贵阳市| 曲周县| 卫辉市| 桓仁| 马尔康县| 宣武区| 厦门市| 平乐县| 深水埗区| 峡江县| 林芝县| 黎城县| 涡阳县| 湖口县| 漳平市| 巴东县| 青冈县| 樟树市| 沙田区| 三都| 宁陵县| 射洪县| 栖霞市| 岳普湖县| 横山县| 张家港市| 成武县| 北辰区| 泾川县| 和林格尔县| 射阳县| 梓潼县| 松江区| 栾川县| 新丰县| 澄城县| 禄劝| 山阴县| 沁水县| 津南区|