Thead類中start()方法和run()方法的區(qū)別?
start()用來啟動一個線程,當調(diào)用start()方法時,系統(tǒng)才會開啟一個線程,通過Thead類中start()方法來啟動的線程處于就緒狀態(tài)(可運行狀態(tài)),此時并沒有運行,一旦得到CPU時間片,就自動開始執(zhí)行run()方法。此時不需要等待run()方法執(zhí)行完也可以繼續(xù)執(zhí)行下面的代碼,所以也由此看出run()方法并沒有實現(xiàn)多線程。?
run()方法是在本線程里的,只是線程里的一個函數(shù),而不是多線程的。如果直接調(diào)用run(),其實就相當于是調(diào)用了一個普通函數(shù)而已,直接待用run()方法必須等待run()方法執(zhí)行完畢才能執(zhí)行下面的代碼,所以執(zhí)行路徑還是只有一條,根本就沒有線程的特征,所以在多線程執(zhí)行時要使用start()方法而不是run()方法。
Thead類中sleep()方法和wait()方法的區(qū)別
wait()方法并不是在Thread類中的,而是輸出Object類,也就是說任何對象都可以調(diào)用這個方法。
Object.wait()和Thread。Thread.sleep()方法都可以讓線程等待若干時間。除了wait()可以被喚醒,另外一個主要區(qū)別就是wait()方法會釋放目標對象的鎖,而Thread.sleep()方法不會釋放任何資源