java執行緒的start和run方法解析

2021-07-16 06:47:59 字數 1210 閱讀 7668

自定義乙個runnable介面的實現類,然後構造乙個thread,即對thread傳入乙個runnable介面類。

new乙個thread或者寫個thread子類,覆蓋它的run方法。(new 乙個thread並覆蓋run方法實際上是匿名內部類的一種方式)

public

static

void

main(string args)

}).start();

new thread();

}.start();

}

上述對應1和2兩種構造執行緒的方法,由於**寫法設計匿名類物件,現做如下輔助說明:

1. 對於第一段我直接傳入了匿名runnable例項,可以自定義乙個runnable例項,然後new thread(runnable)這種形式獲得thread;

2. 對於第二段可以專門定義乙個class去extends thread基類,然後new 這個新的執行緒類。

3. 對於這兩段都是直接new thread 建立匿名類物件,可以定義乙個變數thread1、thread2,然後利用thread1.start() thread2.start()啟動執行緒;

這兩種方式有什麼區別呢,二者最終效果是一樣的,源**級別來看,thread的預設的run方法(不被覆寫的話)是呼叫target(target不為空的話)的run方法,target就是我們傳入的runnable介面類。

public synchronized void

start() finally

} catch (throwable ignore)

}}

執行緒的start最終會呼叫native的start0,此方法會使得jvm虛擬機器呼叫執行緒的run方法。

public

void

run()

}

這裡的target是乙個thread中的runnable的物件

private runnable target;
複寫thread的run方法,則就是start的時候執行緒去執行的run方法。

傳入runnable,則start的時候執行緒執行預設run方法,run方法中會對傳入的target進行呼叫,呼叫target的run方法。

兩者效果一樣,這裡只是幫助我們去看**細節差異。

JAVA 執行緒run和start的區別

thread類中run 和start 方法的區別如下 run 方法 在本執行緒內呼叫該runnable物件的run 方法,可以重複多次呼叫 start 方法 啟動乙個執行緒,呼叫該runnable物件的run 方法,不能多次啟動乙個執行緒 package com.ljq.test public cl...

JAVA 執行緒中start 和run 的區別

run方法相當於呼叫了該類的普通方法。start會執行完整的執行緒週期。run方法 如下。public class test1 class mythread extends thread class mythread2 extends thread 執行結果如下。將執行緒執行方法改至srart 如下...

java多執行緒run 和start 的區別

當你啟動執行緒,使用start 系統會把run 方法當成執行緒執行體來處理,這是正常的,也是正確的情況。但是,當你啟動執行緒時,呼叫run 方法,系統run 方法會立即執行,但是這時候系統會把run 方法當成普通的方法,執行緒物件也當成乙個普通物件。不理解我上面說的話?那我就在解釋一下。第乙個問題,...