Udemy Course Multithreading, Concurrency & Performance 3

Java示範Thread操作與debug及Exception處理

ZONGRU Li
Jun 19, 2021

利用JDK提供的Thread class進行演練

輸出結果:

由上可以看到存在一個叫main的Thread來運作Main class本身main Method

在其中另外建立的Thread雖然在main Thread兩次印文字間執行了start()

但是這個Thread裡面的Runnable()執行的print

是在main Thread印完兩個print out之後

亦即新建的Thread裡的任務排程沒有那麼快被安排(需要一點時間)

最後才看到印出另建的Thead名稱:Thread-0

接著,我可以替Thread命名,而不是用default的Thread-0這種名稱

並且回想前面介紹的Dynamic Priority是由程式管理的,故可操作以下

先選MAX來試試,順便印出這個數字看看是多少

印出結果:

所以可知MAX_PRIORITY是10

了解以上操作對於開發Multi-Thread應用程式會有更多幫助

接著嘗試針對Thread debug在幾個點加入中斷點:

右鍵加入中斷點

看看左邊我設置的中斷點,以及目前第一個停止的中斷點位置

接著按F8(resume)往下一個中斷點可以看到

此時同時存在main與New Worker Thread兩個threads

再一次進到下一個中斷點

發現main Thread不見了,反而多了個DestroyJavaVM,應該是來消滅main Thread的

由上圖來看,main可能已經跑到22行該結束了,所以生出一個DestroyJavaVM

用來消滅main Thread

但是New Worker Thread程式還沒結束

針對Thread操作時,往往會因為一個Thread發生Unchecked Exception

進而導致整個應用程式葛屁

所以針對Thread內的Exception處理就很重要

改寫範例攔截Exception並印出相關訊息如下為:

由上例使用jdk的Thread提供的setUncaughtExceptionHandler

以攔截Thread內發生的Exception並處理

參考課程

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet