start(),run()
都是Thread 類(lèi)里的靜態(tài)方法。 要使用他們要先繼承 或用implements 去執行Runnable 后使用thread
當通常我們要繼承出自己的線(xiàn)程類(lèi),然后把自己要在線(xiàn)程中執行的任務(wù)寫(xiě)在run方法里面,覆蓋父類(lèi)中的run()方法。如:
public class MyThread extends Thread{
public void run(){
for(int i=0; iSystem.out.println("Hello World!");
}
}
}
最近整理的jdk1.8最新方法,詳細具體用法下載個(gè)1.8手冊看看就可以
Thread()、Thread(Runnable target)、Thread(Runnable target, String name)、Thread(String name)、Thread(ThreadGroup group, Runnable target)、Thread(ThreadGroup group, Runnable target, String name)、Thread(ThreadGroup group, Runnable target, String name, long stackSize)、Thread(ThreadGroup group, String name)、static int activeCount()、void checkAccess()、static、Thread currentThread()、static void dumpStack()、static int enumerate(Thread[] tarray)、static MapgetAllStackTraces()、ClassLoader getContextClassLoader()、static Thread. ()、long getId()、String getName()、int getPriority()、StackTraceElement[] getStackTrace()、Thread.State、getState()、ThreadGroup getThreadGroup()、Thread.()、void interrupt()、static boolean interrupted()、boolean isAlive()、boolean isDaemon()、boolean isInterrupted()、void join()、void join(long millis)、void join(long millis, int nanos)、void run()、void setContextClassLoader(ClassLoader cl)、void setDaemon(boolean on)、static void (Thread. eh)、void setName(String name)、void setPriority(int newPriority)、void (Thread. eh)、static void sleep(long millis)、static void sleep(long millis, int nanos)、void start()、String toString()、static void yield()
構造方法摘要 Thread() 分配新的 Thread 對象。
Thread(Runnable target) 分配新的 Thread 對象。 Thread(Runnable target, String name) 分配新的 Thread 對象。
Thread(String name) 分配新的 Thread 對象。 Thread(ThreadGroup group, Runnable target) 分配新的 Thread 對象。
Thread(ThreadGroup group, Runnable target, String name) 分配新的 Thread 對象,以便將 target 作為其運行對象,將指定的 name 作為其名稱(chēng),并作為 group 所引用的線(xiàn)程組的一員。 Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配新的 Thread 對象,以便將 target 作為其運行對象,將指定的 name 作為其名稱(chēng),作為 group 所引用的線(xiàn)程組的一員,并具有指定的堆棧尺寸。
Thread(ThreadGroup group, String name) 分配新的 Thread 對象。 方法摘要 static int activeCount() 返回當前線(xiàn)程的線(xiàn)程組中活動(dòng)線(xiàn)程的數目。
void checkAccess() 判定當前運行的線(xiàn)程是否有權修改該線(xiàn)程。 int countStackFrames() 已過(guò)時(shí)。
該調用的定義依賴(lài)于 suspend(),但它遭到了反對。此外,該調用的結果從來(lái)都不是意義明確的。
static Thread currentThread() 返回對當前正在執行的線(xiàn)程對象的引用。 void destroy() 已過(guò)時(shí)。
該方法最初用于破壞該線(xiàn)程,但不作任何清除。它所保持的任何監視器都會(huì )保持鎖定狀態(tài)。
不過(guò),該方法決不會(huì )被實(shí)現。即使要實(shí)現,它也極有可能以 suspend() 方式被死鎖。
如果目標線(xiàn)程被破壞時(shí)保持一個(gè)保護關(guān)鍵系統資源的鎖,則任何線(xiàn)程在任何時(shí)候都無(wú)法再次訪(fǎng)問(wèn)該資源。如果另一個(gè)線(xiàn)程曾試圖鎖定該資源,則會(huì )出現死鎖。
這類(lèi)死鎖通常會(huì )證明它們自己是“凍結”的進(jìn)程。有關(guān)更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
static void dumpStack() 打印當前線(xiàn)程的堆棧跟蹤。 static int enumerate(Thread[] tarray) 將當前線(xiàn)程的線(xiàn)程組及其子組中的每一個(gè)活動(dòng)線(xiàn)程復制到指定的數組中。
static Map getAllStackTraces() 返回所有活動(dòng)線(xiàn)程的堆棧跟蹤的一個(gè)映射。 ClassLoader getContextClassLoader() 返回該線(xiàn)程的上下文 ClassLoader。
static Thread. () 返回線(xiàn)程由于未捕獲到異常而突然終止時(shí)調用的默認處理程序。 long getId() 返回該線(xiàn)程的標識符。
String getName() 返回該線(xiàn)程的名稱(chēng)。 int getPriority() 返回線(xiàn)程的優(yōu)先級。
StackTraceElement[] getStackTrace() 返回一個(gè)表示該線(xiàn)程堆棧轉儲的堆棧跟蹤元素數組。 Thread.State getState() 返回該線(xiàn)程的狀態(tài)。
ThreadGroup getThreadGroup() 返回該線(xiàn)程所屬的線(xiàn)程組。 Thread. () 返回該線(xiàn)程由于未捕獲到異常而突然終止時(shí)調用的處理程序。
static boolean holdsLock(Object obj) 當且僅當當前線(xiàn)程在指定的對象上保持監視器鎖時(shí),才返回 true。 void interrupt() 中斷線(xiàn)程。
static boolean interrupted() 測試當前線(xiàn)程是否已經(jīng)中斷。 boolean isAlive() 測試線(xiàn)程是否處于活動(dòng)狀態(tài)。
boolean isDaemon() 測試該線(xiàn)程是否為守護線(xiàn)程。 boolean isInterrupted() 測試線(xiàn)程是否已經(jīng)中斷。
void join() 等待該線(xiàn)程終止。 void join(long millis) 等待該線(xiàn)程終止的時(shí)間最長(cháng)為 millis 毫秒。
void join(long millis, int nanos) 等待該線(xiàn)程終止的時(shí)間最長(cháng)為 millis 毫秒 + nanos 納秒。 void resume() 已過(guò)時(shí)。
該方法只與 suspend() 一起使用,但 suspend() 已經(jīng)遭到反對,因為它具有死鎖傾向。有關(guān)更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
void run() 如果該線(xiàn)程是使用獨立的 Runnable 運行對象構造的,則調用該 Runnable 對象的 run 方法;否則,該方法不執行任何操作并返回。 void setContextClassLoader(ClassLoader cl) 設置該線(xiàn)程的上下文 ClassLoader。
void setDaemon(boolean on) 將該線(xiàn)程標記為守護線(xiàn)程或用戶(hù)線(xiàn)程。 static void (Thread. eh) 設置當線(xiàn)程由于未捕獲到異常而突然終止,并且沒(méi)有為該線(xiàn)程定義其他處理程序時(shí)所調用的默認處理程序。
void setName(String name) 改變線(xiàn)程名稱(chēng),使之與參數 name 相同。 void setPriority(int newPriority) 更改線(xiàn)程的優(yōu)先級。
void (Thread. eh) 設置該線(xiàn)程由于未捕獲到異常而突然終止時(shí)調用的處理程序。 static void sleep(long millis) 在指定的毫秒數內讓當前正在執行的線(xiàn)程休眠(暫停執行)。
static void sleep(long millis, int nanos) 在指定的毫秒數加指定的納秒數內讓當前正在執行的線(xiàn)程休眠(暫停執行)。 void start() 使該線(xiàn)程開(kāi)始執行;Java 虛擬機調用該線(xiàn)程的 run 方法。
void stop() 已過(guò)時(shí)。 該方法具有固有的不安全性。
用 Thread.stop 來(lái)終止線(xiàn)程將釋放它已經(jīng)鎖定的所有監視器(作為沿堆棧向上傳播的未檢查 ThreadDeath 異常的一個(gè)自然后果)。如果以前受這些監視器保護。
你可以查看相關(guān)的api文檔
給你一個(gè)源程序看看.
public class StudyThread{
public static void main(String args[]){
new NewThread1("1",1);
new NewThread1("2",5);
new NewThread1("3",7);
new NewThread1("4",10);
System.out.print("主線(xiàn)程啟動(dòng)!");
for(int i=0;i<100;i++){
System.out.print(" ---> ");
}
System.out.print("主線(xiàn)程結束!");
}
}
class NewThread1 implements Runnable{
NewThread1(String threadName,int n){
name=threadName;
t=new Thread(this,name);
t.setPriority(n);
System.out.print(" 新線(xiàn)程"+name+"啟動(dòng) ");
t.start();
}
public void run(){
for(int i=0;i<100;i++){
System.out.print(name);
}
System.out.print(" 線(xiàn)程"+name+"結束 ");
}
private String name;
private Thread t;
}
構造方法摘要 Thread() 分配新的 Thread 對象。
Thread(Runnable target) 分配新的 Thread 對象。 Thread(Runnable target, String name) 分配新的 Thread 對象。
Thread(String name) 分配新的 Thread 對象。 Thread(ThreadGroup group, Runnable target) 分配新的 Thread 對象。
Thread(ThreadGroup group, Runnable target, String name) 分配新的 Thread 對象,以便將 target 作為其運行對象,將指定的 name 作為其名稱(chēng),并作為 group 所引用的線(xiàn)程組的一員。 Thread(ThreadGroup group, Runnable target, String name, long stackSize) 分配新的 Thread 對象,以便將 target 作為其運行對象,將指定的 name 作為其名稱(chēng),作為 group 所引用的線(xiàn)程組的一員,并具有指定的堆棧尺寸。
Thread(ThreadGroup group, String name) 分配新的 Thread 對象。 方法摘要 static int activeCount() 返回當前線(xiàn)程的線(xiàn)程組中活動(dòng)線(xiàn)程的數目。
void checkAccess() 判定當前運行的線(xiàn)程是否有權修改該線(xiàn)程。 int countStackFrames() 已過(guò)時(shí)。
該調用的定義依賴(lài)于 suspend(),但它遭到了反對。此外,該調用的結果從來(lái)都不是意義明確的。
static Thread currentThread() 返回對當前正在執行的線(xiàn)程對象的引用。 void destroy() 已過(guò)時(shí)。
該方法最初用于破壞該線(xiàn)程,但不作任何清除。它所保持的任何監視器都會(huì )保持鎖定狀態(tài)。
不過(guò),該方法決不會(huì )被實(shí)現。即使要實(shí)現,它也極有可能以 suspend() 方式被死鎖。
如果目標線(xiàn)程被破壞時(shí)保持一個(gè)保護關(guān)鍵系統資源的鎖,則任何線(xiàn)程在任何時(shí)候都無(wú)法再次訪(fǎng)問(wèn)該資源。如果另一個(gè)線(xiàn)程曾試圖鎖定該資源,則會(huì )出現死鎖。
這類(lèi)死鎖通常會(huì )證明它們自己是“凍結”的進(jìn)程。有關(guān)更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
static void dumpStack() 打印當前線(xiàn)程的堆棧跟蹤。 static int enumerate(Thread[] tarray) 將當前線(xiàn)程的線(xiàn)程組及其子組中的每一個(gè)活動(dòng)線(xiàn)程復制到指定的數組中。
static Map getAllStackTraces() 返回所有活動(dòng)線(xiàn)程的堆棧跟蹤的一個(gè)映射。 ClassLoader getContextClassLoader() 返回該線(xiàn)程的上下文 ClassLoader。
static Thread. () 返回線(xiàn)程由于未捕獲到異常而突然終止時(shí)調用的默認處理程序。 long getId() 返回該線(xiàn)程的標識符。
String getName() 返回該線(xiàn)程的名稱(chēng)。 int getPriority() 返回線(xiàn)程的優(yōu)先級。
StackTraceElement[] getStackTrace() 返回一個(gè)表示該線(xiàn)程堆棧轉儲的堆棧跟蹤元素數組。 Thread.State getState() 返回該線(xiàn)程的狀態(tài)。
ThreadGroup getThreadGroup() 返回該線(xiàn)程所屬的線(xiàn)程組。 Thread. () 返回該線(xiàn)程由于未捕獲到異常而突然終止時(shí)調用的處理程序。
static boolean holdsLock(Object obj) 當且僅當當前線(xiàn)程在指定的對象上保持監視器鎖時(shí),才返回 true。 void interrupt() 中斷線(xiàn)程。
static boolean interrupted() 測試當前線(xiàn)程是否已經(jīng)中斷。 boolean isAlive() 測試線(xiàn)程是否處于活動(dòng)狀態(tài)。
boolean isDaemon() 測試該線(xiàn)程是否為守護線(xiàn)程。 boolean isInterrupted() 測試線(xiàn)程是否已經(jīng)中斷。
void join() 等待該線(xiàn)程終止。 void join(long millis) 等待該線(xiàn)程終止的時(shí)間最長(cháng)為 millis 毫秒。
void join(long millis, int nanos) 等待該線(xiàn)程終止的時(shí)間最長(cháng)為 millis 毫秒 + nanos 納秒。 void resume() 已過(guò)時(shí)。
該方法只與 suspend() 一起使用,但 suspend() 已經(jīng)遭到反對,因為它具有死鎖傾向。有關(guān)更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。
void run() 如果該線(xiàn)程是使用獨立的 Runnable 運行對象構造的,則調用該 Runnable 對象的 run 方法;否則,該方法不執行任何操作并返回。 void setContextClassLoader(ClassLoader cl) 設置該線(xiàn)程的上下文 ClassLoader。
void setDaemon(boolean on) 將該線(xiàn)程標記為守護線(xiàn)程或用戶(hù)線(xiàn)程。 static void (Thread. eh) 設置當線(xiàn)程由于未捕獲到異常而突然終止,并且沒(méi)有為該線(xiàn)程定義其他處理程序時(shí)所調用的默認處理程序。
void setName(String name) 改變線(xiàn)程名稱(chēng),使之與參數 name 相同。 void setPriority(int newPriority) 更改線(xiàn)程的優(yōu)先級。
void (Thread. eh) 設置該線(xiàn)程由于未捕獲到異常而突然終止時(shí)調用的處理程序。 static void sleep(long millis) 在指定的毫秒數內讓當前正在執行的線(xiàn)程休眠(暫停執行)。
static void sleep(long millis, int nanos) 在指定的毫秒數加指定的納秒數內讓當前正在執行的線(xiàn)程休眠(暫停執行)。 void start() 使該線(xiàn)程開(kāi)始執行;Java 虛擬機調用該線(xiàn)程的 run 方法。
void stop() 已過(guò)時(shí)。 該方法具有固有的不安全性。
用 Thread.stop 來(lái)終止線(xiàn)程將釋放它已經(jīng)鎖定的所有監視器。
Runnable 接口就一個(gè)抽象的方法 run()
Thread類(lèi)成員變量:
static int MAX_PRIORITY
static int MIN_PRIORITY
static int NORM_PRIORITY
成員方法:
void start()
void run()
void stop()
static void sleep(long millis)
void destroy()
void suspend()
看一下Thread類(lèi)的源碼,也許你就能搞清楚為身么文檔里這樣解釋。
這是Thread類(lèi)的run()方法的代碼。一目了然如果target存在的話(huà)執行target的run()方法,否則什么也不做。這樣我們可以推測(因為T(mén)hread 實(shí)際運行的方法start0 是native方法 我們看不到它的實(shí)現)也就是說(shuō)Thread的run()方法總是先被調用的,然后調用taget(構造函數中的Runnable對象)的run()方法。
public void run() {
if (target != null) {
target.run();
}
}
如果對于target的來(lái)歷還有疑問(wèn),可以看一下構造函數的實(shí)現:
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
還沒(méi)完那。。。, init 的實(shí)現:
private void init(ThreadGroup g, Runnable target, String name,
long stackSize) {
//太多了,不貼了,總之target 就是那個(gè)Runnable了
}
說(shuō)的不清楚么?總之Thread的start方法會(huì )調用自己的run方法,run方法會(huì )調用用于構造的Runnable對象的run方法。另一個(gè)編寫(xiě)自己的線(xiàn)程的方法就是extends Thread類(lèi)并改寫(xiě)run方法。
在java5以前實(shí)現多線(xiàn)程有兩種方法(繼承Thread類(lèi)和實(shí)現Runnable接口)
它們分別為:
使用new Thread()和new Thread(Runnable)形式
第一種直接調用thread的run方法,所以,往往使用Thread子類(lèi),即new SubThread()。
第二種調用
Runnable的run方法。
第一種:
new Thread(){}.start();這表示調用Thread子類(lèi)對象的run方法,new Thread(){}表示一個(gè)Thread的匿名子類(lèi)的實(shí)例對象,子類(lèi)加上run方法后的代碼如下:
new Thread(){
public void run(){
}
}.start();
第二種:
new Thread(
new Runnable(){}
).start();
這表示調用Thread對象接受的Runnable對象的run方法,new Runnable(){}表示一個(gè)Runnable的匿名子類(lèi)的實(shí)例對象,
runnable的子類(lèi)加上run方法后的代碼如下:
new Thread(new Runnable(){
public void run(){
}
}
).start();
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.603秒