java.lang.InternalError: Thread starting during runtime shutdown

前段時間寫一個小項目練手,在使用UncaughtExceptionHandler上傳錯誤報告的時候一直出現java.lang.InternalError: Thread starting during runtime shutdown這樣一個異常,百思不得其解,後來在StackOverFlow上找到了解決辦法,決定記錄下來。

java.lang.InternalError: Thread starting during runtime shutdown at java.lang.Thread.nativeCreate(Native Method)
at java.lang.Thread.start(Thread.java:1042) at org.apache.http.impl.conn.tsccm.AbstractConnPool.enableConnectionGC(AbstractConnPool.java:140)
at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.createConnectionPool(ThreadSafeClientConnManager.java:120) 
at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.<init>(ThreadSafeClientConnManager.java:98) 

StackOverFlow中大神的解釋是:當前線程開啓的太晚,也就是說當我在UncaughtExceptionHandler接收到未捕獲的異常時,開啓一個子線程來上傳錯誤日誌,在上傳錯誤日誌時創建了HttpClient,但是HttpClient在創建時設置了ThreadSafeClientConnManager來管理連接,通過查看ThreadSafeClientConnManager的源碼發現,ThreadSafeClientConnManager也開啓了子線程,這就出現了在子線程中開啓子線程的問題,這就會導致uncaughtException()在執行完成後線程中的線程纔開啓,就會拋出java.lang.InternalError: Thread starting during runtime shutdown。

這個問題的解決方案是:提前創建HttpClient,因爲HttpClient創建是也會開啓線程,避免在uncaughtException()中創建,從而避免了在線程中開啓線程的問題。

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