java Thread中,run方法和start方法的區別
阿新 • • 發佈:2022-03-31
先說結論:
(1)通過呼叫Thread類中的start()方法可以啟動一個執行緒,但是執行緒並不是立刻執行,而是處於就緒態,一旦獲取cpu時間片,則會立即執行run()方法
(2)start()方法實現了多執行緒執行,而run()方法只是一個普通方法呼叫
原始碼分析:
`public synchronized void start() {
if (threadStatus != 0) //判斷執行緒是否是就緒狀態,如果不是則會丟擲異常 throw new IllegalThreadStateException(); group.add(this); //通知執行緒組這個執行緒即將啟動,把該執行緒加入執行緒組中 boolean started = false; //設定started標記 try { start0(); //通過JVM呼叫start0()方法啟動執行緒 started = true; //修改started標記 } finally { try { if (!started) { //如果started標記沒有被修改,則執行緒啟動失敗 group.threadStartFailed(this); } } catch (Throwable ignore) { } } }`
public void run() { if (target != null) { //target是一個Runnable物件,通過target.run()可以直接調到你寫的run方法 target.run(); } }