Udemy Course Multithreading, Concurrency & Performance 3
利用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來試試,順便印出這個數字看看是多少
印出結果:
了解以上操作對於開發Multi-Thread應用程式會有更多幫助
接著嘗試針對Thread debug在幾個點加入中斷點:
看看左邊我設置的中斷點,以及目前第一個停止的中斷點位置
接著按F8(resume)往下一個中斷點可以看到
再一次進到下一個中斷點
由上圖來看,main可能已經跑到22行該結束了,所以生出一個DestroyJavaVM
用來消滅main Thread
但是New Worker Thread程式還沒結束
針對Thread操作時,往往會因為一個Thread發生Unchecked Exception
進而導致整個應用程式葛屁
所以針對Thread內的Exception處理就很重要
改寫範例攔截Exception並印出相關訊息如下為:
由上例使用jdk的Thread提供的setUncaughtExceptionHandler
以攔截Thread內發生的Exception並處理