Java輸出導致死鎖,at java.io.PrintStream.println(PrintStream.java:805) - waiting to lock

Java輸出導致死鎖,at java.io.PrintStream.println(PrintStream.java:805) - waiting to lock <0x0000000494fa8398> (a java.io.PrintStream)

問題描述

  在博主最近寫的一個web項目中遇到了死鎖的錯誤(準確來說應該是BLOCKED),具體表現是當訪問的servlet中有輸出語句時,頁面就會無法訪問,通過jdk自帶的Java VisualVM(在jdk的bin目錄下)可以查看線程狀態,並進行線程Dump,得到的錯誤信息如下:

java.lang.Thread.State: BLOCKED (on object monitor)
at java.io.PrintStream.println(PrintStream.java:805)
- waiting to lock <0x0000000494fa8398> (a java.io.PrintStream)
at org.apache.tomcat.util.log.SystemLogHandler.println(SystemLogHandler.java:264)
at com.wlw.action.UserAction.toLoginPage(UserAction.java:177)

  追蹤錯誤發現問題僅僅出在一個我們最常用的System.out.println();語句中,雖然說在正式的項目中我們不太可能用System.out.println();語句來輸出日誌,但是博主查找資料時發現,有小夥伴使用log4j的log.info();輸出時也遇到了這個問題。

問題原因

各位讀者最想看應該就是問題出現的原因了,這個原因其實的確很讓人惱火,因爲在stackoverflow上有人回答說,這是eclipse3.6.2之前的一個bug!!

  So,這,我也很無奈啊~

問題解決

關於問題的解決就相對比較簡單了,大家可以去掉所有的輸出語句,將日誌記錄在文件裏就可以解決了。

  有興趣的讀者可參考:stackoverflow給出的回答

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章