国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java線程中start和run方法全面解析

2019-11-26 14:00:11
字體:
來源:轉載
供稿:網友

自定義線程兩種方法

自定義一個runnable接口的實現類,然后構造一個thread,即對thread傳入一個runnable接口類。

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

示例代碼

public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {System.out.println("create thread by passing a runnable target !");}}).start();new Thread(){@Overridepublic void run() {System.out.println("create thread by Override run method !");};}.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() {if (threadStatus != 0)throw new IllegalThreadStateException();group.add(this);boolean started = false;try {start0();started = true;} finally {try {if (!started) {group.threadStartFailed(this);}} catch (Throwable ignore) {}}}

線程的start最終會調用native的start0,此方法會使得jvm虛擬機調用線程的run方法。

public void run() {if (target != null) {target.run();}}

這里的target是一個Thread中的runnable的對象

private Runnable target;

總結

復寫thread的run方法,則就是start的時候線程去執行的run方法。

傳入runnable,則start的時候線程執行默認run方法,run方法中會對傳入的target進行調用,調用target的run方法。

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

以上所述是小編給大家介紹的Java線程中start和run方法全面解析,希望對大家有所幫助,如果大家想了解更多內容敬請關注武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拉萨市| 溆浦县| 安丘市| 黔江区| 鄯善县| 双峰县| 黑水县| 鄄城县| 平舆县| 壶关县| 定襄县| 城市| 淮南市| 洪泽县| 汶上县| 襄垣县| 湘西| 肥乡县| 城口县| 南安市| 同江市| 武夷山市| 江达县| 古浪县| 芷江| 永胜县| 扶绥县| 南雄市| 龙门县| 榕江县| 百色市| 内乡县| 太湖县| 张家口市| 泽州县| 宿松县| 桦南县| 宜兴市| 安溪县| 大厂| 洪洞县|