程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java線程中start和run辦法周全解析

Java線程中start和run辦法周全解析

編輯:關於JAVA

Java線程中start和run辦法周全解析。本站提示廣大學習愛好者:(Java線程中start和run辦法周全解析)文章只能為提供參考,不一定能成為您想要的結果。以下是Java線程中start和run辦法周全解析正文


自界說線程兩種辦法

自界說一個runnable接口的完成類,然後結構一個thread,即對thread傳入一個runnable接口類。

new一個thread或許寫個thread子類,籠罩它的run辦法。(new 一個thread並籠罩run辦法現實上是匿名外部類的一種方法)

示例代碼

public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("create thread by passing a runnable target !");
}
}).start();
new Thread(){
@Override
public 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辦法周全解析,願望對年夜家有所贊助,假如年夜家想懂得更多內容敬請存眷!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved