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