java多線程的使用
㈠ java多線程有幾種實現方法
繼承Thread類來實現多線程:
當我們自定義的類繼承Thread類後,該類就為一個線程類,該類為一個獨立的執行單元,線程代碼必須編寫在run()方法中,run方法是由Thread類定義,我們自己寫的線程類必須重寫run方法。
run方法中定義的代碼為線程代碼,但run方法不能直接調用,如果直接調用並沒有開啟新的線程而是將run方法交給調用的線程執行
要開啟新的線程需要調用Thread類的start()方法,該方法自動開啟一個新的線程並自動執行run方法中的內容
*java多線程的啟動順序不一定是線程執行的順序,各個線程之間是搶佔CPU資源執行的,所有有可能出現與啟動順序不一致的情況。
CPU的調用策略:
如何使用CPU資源是由操作系統來決定的,但操作系統只能決定CPU的使用策略不能控制實際獲得CPU執行權的程序。
線程執行有兩種方式:
1.搶占式:
目前PC機中使用最多的一種方式,線程搶佔CPU的執行權,當一個線程搶到CPU的資源後並不是一直執行到此線程執行結束,而是執行一個時間片後讓出CPU資源,此時同其他線程再次搶佔CPU資源獲得執行權。
2.輪循式;
每個線程執行固定的時間片後讓出CPU資源,以此循環執行每個線程執行相同的時間片後讓出CPU資源交給下一個線程執行。
㈡ Java澶氱嚎紼嬪垵瀛﹁呮寚鍗楋紙3錛夛細浣跨敤Runnable鎺ュ彛鍒涘緩綰跨▼
銆銆涓婁竴綃 Java澶氱嚎紼嬪垵瀛﹁呮寚鍗楋紙 錛 鐢═hread綾誨壋寤虹嚎紼
銆銆瀹炵幇Runnable鎺ュ彛鐨勭被蹇呴』浣跨敤Thread綾葷殑瀹炰緥鎵嶈兘鍒涘緩綰跨▼ 閫氳繃Runnable鎺ュ彛鍒涘緩綰跨▼鍒嗕負涓ゆ
銆銆 灝嗗疄鐜癛unnable鎺ュ彛鐨勭被瀹炰緥鍖
銆銆 寤虹珛涓涓猅hread瀵硅薄 騫跺皢絎涓姝ュ疄渚嬪寲鍚庣殑瀵硅薄浣滀負鍙傛暟浼犲叆Thread綾葷殑鏋勯犳柟娉
銆銆鏈鍚庨氳繃Thread綾葷殑start鏂規硶寤虹珛綰跨▼
銆銆涓嬮潰鐨勪唬鐮佹紨紺轟簡濡備綍浣跨敤Runnable鎺ュ彛鏉ュ壋寤虹嚎紼
銆銆 packagemythread;{publicvoidrun(){System out println(Thread currentThread() getName());}publicstaticvoidmain(String[]args){MyRunnablet =newMyRunnable();MyRunnablet =newMyRunnable();Threadthread =newThread(t MyThread );Threadthread =newThread(t );thread setName( MyThread );thread start();thread start();}}
銆銆涓婇潰浠g爜鐨勮繍琛岀粨鏋滃備笅
lishixin/Article/program/Java/gj/201311/27466
㈢ Java線程怎樣使用
多進程是指操作系統能同時運行多個任務(程序),多線程是指在同一程序中有多個順序流在執行。
在java中創建一個線程有兩種方法:
packagecom.thread;
publicclassThreadTest1{
publicstaticvoidmain(String[]args){
Runnable1r=newRunnable1();
//r.run();並不是線程開啟,而是簡單的方法調用
Threadt=newThread(r);//創建線程
//t.run();//如果該線程是使用獨立的Runnable運行對象構造的,則調用該Runnable對象的run方法;否則,該方法不執行任何操作並返回。
t.start();//線程開啟
for(inti=0;i<100;i++){
System.out.println("main:"+i);
}
}
}
{
publicvoidrun(){
for(inti=0;i<100;i++){
System.out.println("Thread-----:"+i);
}
}
}
㈣ Java的線程在項目中一般會有什麼具體的應用
java線程在項目中的應用場景如下:
場景一:一個業務邏輯有很多次的循環,每次循環之間沒有影響,比如驗證1萬條url路徑是否存在,正常情況要循環1萬次,逐個去驗證每一條URL,這樣效率會很低,假設驗證一條需要1分鍾,總共就需要1萬分鍾,有點恐怖。這時可以用多線程,將1萬條URL分成50等份,開50個線程,沒個線程只需驗證200條,這樣所有的線程執行完是遠小於1萬分鍾的。
場景二:需要知道一個任務的執行進度,比如我們常看到的進度條,實現方式可以是在任務中加入一個整型屬性變數(這樣不同方法可以共享),任務執行一定程度就給變數值加1,另外開一個線程按時間間隔不斷去訪問這個變數,並反饋給用戶。
總之使用多線程就是為了充分利用cpu的資源,提高程序執行效率,當你發現一個業務邏輯執行效率特別低,耗時特別長,就可以考慮使用多線程。不過CPU執行哪個線程的時間和順序是不確定的,即使設置了線程的優先順序,因此使用多線程的風險也是比較大的,會出現很多預料不到的問題,一定要多熟悉概念,多構造不同的場景去測試才能夠掌握!
㈤ 什麼是java多線程詳解
線程對象是可以產生線程的對象。比如在Java平台中Thread對象,Runnable對象。線程,是指正在執行的一個指點令序列。在java平台上是指從一個線程對象的start()開始,運行run方法體中的那一段相對獨立的過程。相比於多進程,多線程的優勢有:
(1)進程之間不能共享數據,線程可以;
(2)系統創建進程需要為該進程重新分配系統資源,故創建線程代價比較小;
(3)Java語言內置了多線程功能支持,簡化了java多線程編程。
一、創建線程和啟動
(1)繼承Thread類創建線程類
通過繼承Thread類創建線程類的具體步驟和具體代碼如下:
• 定義一個繼承Thread類的子類,並重寫該類的run()方法;
• 創建Thread子類的實例,即創建了線程對象;
• 調用該線程對象的start()方法啟動線程。
復制代碼
class SomeThead extends Thraad {
public void run() {
//do something here
}
}
public static void main(String[] args){
SomeThread oneThread = new SomeThread();
步驟3:啟動線程:
oneThread.start();
}
復制代碼
(2)實現Runnable介面創建線程類
通過實現Runnable介面創建線程類的具體步驟和具體代碼如下:
• 定義Runnable介面的實現類,並重寫該介面的run()方法;
• 創建Runnable實現類的實例,並以此實例作為Thread的target對象,即該Thread對象才是真正的線程對象。
復制代碼
class SomeRunnable implements Runnable {
public void run() {
//do something here
}
}
Runnable oneRunnable = new SomeRunnable();
Thread oneThread = new Thread(oneRunnable);
oneThread.start();
復制代碼
(3)通過Callable和Future創建線程
通過Callable和Future創建線程的具體步驟和具體代碼如下:
• 創建Callable介面的實現類,並實現call()方法,該call()方法將作為線程執行體,並且有返回值。
• 創建Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。
• 使用FutureTask對象作為Thread對象的target創建並啟動新線程。
• 調用FutureTask對象的get()方法來獲得子線程執行結束後的返回值其中,Callable介面(也只有一個方法)定義如下:
復制代碼
public interface Callable {
V call() throws Exception;
}
步驟1:創建實現Callable介面的類SomeCallable(略);
步驟2:創建一個類對象:
Callable oneCallable = new SomeCallable();
步驟3:由Callable創建一個FutureTask對象:
FutureTask oneTask = new FutureTask(oneCallable);
注釋: FutureTask是一個包裝器,它通過接受Callable來創建,它同時實現了 Future和Runnable介面。
步驟4:由FutureTask創建一個Thread對象:
Thread oneThread = new Thread(oneTask);
步驟5:啟動線程:
oneThread.start();
㈥ 鍦↗ava 涓澶氱嚎紼嬬殑瀹炵幇鏂規硶鏈夊摢浜涳紝濡備綍浣跨敤鍀烇綖鍀烇綖鍀烇綖鍀烇綖鍀烇綖鍀烇綖鍀烇綖鍀烇綖鍀烇綖鎬
1銆 璁よ瘑Thread鍜孯unnable
Java涓瀹炵幇澶氱嚎紼嬫湁涓ょ嶉斿緞錛氱戶鎵縏hread綾繪垨鑰呭疄鐜癛unnable鎺ュ彛銆俁unnable鏄鎺ュ彛錛屽緩璁鐢ㄦ帴鍙g殑鏂瑰紡鐢熸垚綰跨▼錛屽洜涓烘帴鍙e彲浠ュ疄鐜板氱戶鎵匡紝鍐典笖Runnable鍙鏈変竴涓猺un鏂規硶錛屽緢閫傚悎緇ф壙銆傚湪浣跨敤Thread鐨勬椂鍊欏彧闇緇ф壙Thread錛屽苟涓攏ew涓涓瀹炰緥鍑烘潵錛岃皟鐢╯tart()鏂規硶鍗沖彲浠ュ惎鍔ㄤ竴涓綰跨▼銆
Thread Test = new Thread();
Test.start();
鍦ㄤ嬌鐢≧unnable鐨勬椂鍊欓渶瑕佸厛new涓涓瀹炵幇Runnable鐨勫疄渚嬶紝涔嬪悗鍚鍔═hread鍗沖彲銆
Test impelements Runnable;
Test t = new Test();
Thread test = new Thread(t);
test.start();
鎬葷粨錛歍hread鍜孯unnable鏄瀹炵幇java澶氱嚎紼嬬殑2縐嶆柟寮忥紝runable鏄鎺ュ彛錛宼hread鏄綾伙紝寤鴻浣跨敤runable瀹炵幇java澶氱嚎紼嬶紝涓嶇″備綍錛屾渶緇堥兘闇瑕侀氳繃thread.start()鏉ヤ嬌綰跨▼澶勪簬鍙榪愯岀姸鎬併
2銆 璁よ瘑Thread鐨剆tart鍜宺un
1錛 start錛
鐢╯tart鏂規硶鏉ュ惎鍔ㄧ嚎紼嬶紝鐪熸e疄鐜頒簡澶氱嚎紼嬭繍琛岋紝榪欐椂鏃犻渶絳夊緟run鏂規硶浣撲唬鐮佹墽琛屽畬姣曡岀洿鎺ョ戶緇鎵ц屼笅闈㈢殑浠g爜銆傞氳繃璋冪敤Thread綾葷殑start()鏂規硶鏉ュ惎鍔ㄤ竴涓綰跨▼錛岃繖鏃舵ょ嚎紼嬪勪簬灝辯華錛堝彲榪愯岋級鐘舵侊紝騫舵病鏈夎繍琛岋紝涓鏃﹀緱鍒皊pu鏃墮棿鐗囷紝灝卞紑濮嬫墽琛宺un()鏂規硶錛岃繖閲屾柟娉時un()縐頒負綰跨▼浣擄紝瀹冨寘鍚浜嗚佹墽琛岀殑榪欎釜綰跨▼鐨勫唴瀹癸紝Run鏂規硶榪愯岀粨鏉燂紝姝ょ嚎紼嬮殢鍗崇粓姝銆
2錛 run錛
run()鏂規硶鍙鏄綾葷殑涓涓鏅閫氭柟娉曡屽凡錛屽傛灉鐩存帴璋冪敤Run鏂規硶錛岀▼搴忎腑渚濈劧鍙鏈変富綰跨▼榪欎竴涓綰跨▼錛屽叾紼嬪簭鎵ц岃礬寰勮繕鏄鍙鏈変竴鏉★紝榪樻槸瑕侀『搴忔墽琛岋紝榪樻槸瑕佺瓑寰卹un鏂規硶浣撴墽琛屽畬姣曞悗鎵嶅彲緇х畫鎵ц屼笅闈㈢殑浠g爜錛岃繖鏍峰氨娌℃湁杈懼埌鍐欑嚎紼嬬殑鐩鐨勩
鎬葷粨錛氳皟鐢╯tart鏂規硶鏂瑰彲鍚鍔ㄧ嚎紼嬶紝鑰宺un鏂規硶鍙鏄痶hread鐨勪竴涓鏅閫氭柟娉曡皟鐢錛岃繕鏄鍦ㄤ富綰跨▼閲屾墽琛屻
3銆 綰跨▼鐘舵佽存槑
綰跨▼鐘舵佷粠澶х殑鏂歸潰鏉ヨ達紝鍙褰掔粨涓猴細鍒濆嬬姸鎬併佸彲榪愯岀姸鎬併佷笉鍙榪愯岀姸鎬佸拰娑堜骸鐘舵侊紝鍏蜂綋鍙緇嗗垎涓轟笂鍥炬墍紺7涓鐘舵侊紝璇存槑濡備笅錛
1錛 綰跨▼鐨勫疄鐜版湁涓ょ嶆柟寮忥紝涓鏄緇ф壙Thread綾伙紝浜屾槸瀹炵幇Runnable鎺ュ彛錛屼絾涓嶇℃庢牱錛屽綋鎴戜滑new浜唗hread瀹炰緥鍚庯紝綰跨▼灝辮繘鍏ヤ簡鍒濆嬬姸鎬侊紱
2錛 褰撹ュ硅薄璋冪敤浜唖tart()鏂規硶錛屽氨榪涘叆鍙榪愯岀姸鎬侊紱
3錛 榪涘叆鍙榪愯岀姸鎬佸悗錛屽綋璇ュ硅薄琚鎿嶄綔緋葷粺閫変腑錛岃幏寰桟PU鏃墮棿鐗囧氨浼氳繘鍏ヨ繍琛岀姸鎬侊紱
4錛 榪涘叆榪愯岀姸鎬佸悗case灝辨瘮杈冨氾紝澶ц嚧鏈夊備笅鎯呭艦錛
路run()鏂規硶鎴杕ain()鏂規硶緇撴潫鍚庯紝綰跨▼灝辮繘鍏ョ粓姝㈢姸鎬侊紱
路褰撶嚎紼嬭皟鐢ㄤ簡鑷韜鐨剆leep()鏂規硶鎴栧叾浠栫嚎紼嬬殑join()鏂規硶錛屽氨浼氳繘鍏ラ樆濉炵姸鎬(璇ョ姸鎬佹棦鍋滄㈠綋鍓嶇嚎紼嬶紝浣嗗苟涓嶉噴鏀炬墍鍗犳湁鐨勮祫婧)銆傚綋sleep()緇撴潫鎴杍oin()緇撴潫鍚庯紝璇ョ嚎紼嬭繘鍏ュ彲榪愯岀姸鎬侊紝緇х畫絳夊緟OS鍒嗛厤鏃墮棿鐗囷紱
路褰撶嚎紼嬪垰榪涘叆鍙榪愯岀姸鎬(娉ㄦ剰錛岃繕娌¤繍琛)錛屽彂鐜板皢瑕佽皟鐢ㄧ殑璧勬簮琚閿佺墷(synchroniza,lock)錛屽皢浼氱珛鍗寵繘鍏ラ攣奼犵姸鎬侊紝絳夊緟鑾峰彇閿佹爣璁(榪欐椂鐨勯攣奼犻噷涔熻稿凡緇忔湁浜嗗叾浠栫嚎紼嬪湪絳夊緟鑾峰彇閿佹爣璁幫紝榪欐椂瀹冧滑澶勪簬闃熷垪鐘舵侊紝鏃㈠厛鍒板厛寰)錛屼竴鏃︾嚎紼嬭幏寰楅攣鏍囪板悗錛屽氨杞鍏ュ彲榪愯岀姸鎬侊紝絳夊緟OS鍒嗛厤CPU鏃墮棿鐗囷紱
路褰撶嚎紼嬭皟鐢╳ait()鏂規硶鍚庝細榪涘叆絳夊緟闃熷垪(榪涘叆榪欎釜鐘舵佷細閲婃斁鎵鍗犳湁鐨勬墍鏈夎祫婧愶紝涓庨樆濉炵姸鎬佷笉鍚)錛岃繘鍏ヨ繖涓鐘舵佸悗錛屾槸涓嶈兘鑷鍔ㄥ敜閱掔殑錛屽繀欏諱緷闈犲叾浠栫嚎紼嬭皟鐢╪otify()鎴杗otifyAll()鏂規硶鎵嶈兘琚鍞ら啋(鐢變簬notify()鍙鏄鍞ら啋涓涓綰跨▼錛屼絾鎴戜滑鐢變笉鑳界『瀹氬叿浣撳敜閱掔殑鏄鍝涓涓綰跨▼錛屼篃璁告垜浠闇瑕佸敜閱掔殑綰跨▼涓嶈兘澶熻鍞ら啋錛屽洜姝ゅ湪瀹為檯浣跨敤鏃訛紝涓鑸閮界敤notifyAll()鏂規硶錛屽敜閱掓湁鎵綰跨▼)錛岀嚎紼嬭鍞ら啋鍚庝細榪涘叆閿佹睜錛岀瓑寰呰幏鍙栭攣鏍囪般
路褰撶嚎紼嬭皟鐢╯top鏂規硶錛屽嵆鍙浣跨嚎紼嬭繘鍏ユ秷浜$姸鎬侊紝浣嗘槸鐢變簬stop鏂規硶鏄涓嶅畨鍏ㄧ殑錛屼笉榧撳姳浣跨敤錛屽ぇ瀹跺彲浠ラ氳繃run鏂規硶閲岀殑鏉′歡鍙橀氬疄鐜扮嚎紼嬬殑stop銆
㈦ 鑳借В閲婁竴涓媕ava鐨勭嚎紼嬬殑浣跨敤
闅忕潃璁$畻鏈虹殑椋為熷彂灞曪紝涓浜鴻$畻鏈轟笂鐨勬搷浣滅郴緇熶篃綰風悍閲囩敤澶氫換鍔″拰鍒嗘椂璁捐★紝灝嗘棭鏈熷彧鏈夊ぇ鍨嬭$畻鏈烘墠鍏鋒湁鐨勭郴緇熺壒鎬у甫鍒頒簡涓浜鴻$畻鏈虹郴緇熶腑銆備竴鑸鍙浠ュ湪鍚屼竴鏃墮棿鍐呮墽琛屽氫釜紼嬪簭鐨勬搷浣滅郴緇熼兘鏈夎繘紼嬬殑姒傚康銆備竴涓榪涚▼灝辨槸涓涓鎵ц屼腑鐨勭▼搴忥紝鑰屾瘡涓涓榪涚▼閮芥湁鑷宸辯嫭絝嬬殑涓鍧楀唴瀛樼┖闂淬佷竴緇勭郴緇熻祫婧愩傚湪榪涚▼姒傚康涓錛屾瘡涓涓榪涚▼鐨勫唴閮ㄦ暟鎹鍜岀姸鎬侀兘鏄瀹屽叏鐙絝嬬殑銆侸ava紼嬪簭閫氳繃嫻佹帶鍒舵潵鎵ц岀▼搴忔祦錛岀▼搴忎腑鍗曚釜欏哄簭鐨勬祦鎺у埗縐頒負綰跨▼錛屽氱嚎紼嬪垯鎸囩殑鏄鍦ㄥ崟涓紼嬪簭涓鍙浠ュ悓鏃惰繍琛屽氫釜涓嶅悓鐨勭嚎紼嬶紝鎵ц屼笉鍚岀殑浠誨姟銆傚氱嚎紼嬫剰鍛崇潃涓涓紼嬪簭鐨勫氳岃鍙ュ彲浠ョ湅涓婂幓鍑犱箮鍦ㄥ悓涓鏃墮棿鍐呭悓鏃惰繍琛屻
綰跨▼涓庤繘紼嬬浉浼礆紝鏄涓孌靛畬鎴愭煇涓鐗瑰畾鍔熻兘鐨勪唬鐮侊紝鏄紼嬪簭涓鍗曚釜欏哄簭鐨勬祦鎺у埗錛涗絾涓庤繘紼嬩笉鍚岀殑鏄錛屽悓綾葷殑澶氫釜綰跨▼鏄鍏變韓涓鍧楀唴瀛樼┖闂村拰涓緇勭郴緇熻祫婧愶紝鑰岀嚎紼嬫湰韜鐨勬暟鎹閫氬父鍙鏈夊井澶勭悊鍣ㄧ殑瀵勫瓨鍣ㄦ暟鎹錛屼互鍙婁竴涓渚涚▼搴忔墽琛屾椂浣跨敤鐨勫爢鏍堛傛墍浠ョ郴緇熷湪浜х敓涓涓綰跨▼錛屾垨鑰呭湪鍚勪釜綰跨▼涔嬮棿鍒囨崲鏃訛紝璐熸媴瑕佹瘮榪涚▼灝忕殑澶氾紝姝e洜濡傛わ紝綰跨▼琚縐頒負杞昏礋鑽瘋繘紼嬶紙light-weight process錛夈備竴涓榪涚▼涓鍙浠ュ寘鍚澶氫釜綰跨▼銆
涓涓綰跨▼鏄涓涓紼嬪簭鍐呴儴鐨勯『搴忔帶鍒舵祦銆
1. 榪涚▼錛氭瘡涓榪涚▼閮芥湁鐙絝嬬殑浠g爜鍜屾暟鎹絀洪棿錛堣繘紼嬩笂涓嬫枃錛 錛岃繘紼嬪垏鎹㈢殑寮閿澶с
2. 綰跨▼錛氳交閲忕殑榪涚▼錛屽悓涓綾葷嚎紼嬪叡浜浠g爜鍜屾暟鎹絀洪棿錛屾瘡涓綰跨▼鏈夌嫭絝嬬殑榪愯屾爤鍜岀▼搴忚℃暟鍣錛圥C錛夛紝綰跨▼鍒囨崲鐨勫紑閿灝忋
3. 澶氳繘紼嬶細鍦ㄦ搷浣滅郴緇熶腑錛岃兘鍚屾椂榪愯屽氫釜浠誨姟紼嬪簭銆
4. 澶氱嚎紼嬶細鍦ㄥ悓涓搴旂敤紼嬪簭涓錛屾湁澶氫釜欏哄簭嫻佸悓鏃舵墽琛屻
6錛1錛1 綰跨▼鐨勬傚康妯″瀷
Java鍐呭湪鏀鎸佸氱嚎紼嬶紝瀹冪殑鎵鏈夌被閮芥槸鍦ㄥ氱嚎紼嬩笅瀹氫箟鐨勶紝Java鍒╃敤澶氱嚎紼嬩嬌鏁翠釜緋葷粺鎴愪負寮傛ョ郴緇熴侸ava涓鐨勭嚎紼嬬敱涓夐儴鍒嗙粍鎴愶紝濡傚浘6.1鎵紺恆
1. 鉶氭嫙鐨凜PU錛屽皝瑁呭湪Java.lang.Thread綾諱腑銆
2. CPU鎵鎵ц岀殑浠g爜錛屼紶閫掔粰Thread綾匯
3. CPU鎵澶勭悊鐨勬暟鎹錛屼紶閫掔粰Thread綾匯
鍥6.1綰跨▼
6. 1. 2 綰跨▼浣(1)
Java鐨勭嚎紼嬫槸閫氳繃Java.lang.Thread綾繪潵瀹炵幇鐨勩傚綋鎴戜滑鐢熸垚涓涓猅hread綾葷殑瀵硅薄涔嬪悗,涓涓鏂扮殑綰跨▼灝變駭鐢熶簡銆
姝ょ嚎紼嬪疄渚嬭〃紺篔ava瑙i噴鍣ㄤ腑鐨勭湡姝g殑綰跨▼錛岄氳繃瀹冨彲浠ュ惎鍔ㄧ嚎紼嬨佺粓姝㈢嚎紼嬨佺嚎紼嬫寕璧風瓑錛屾瘡涓綰跨▼閮芥槸閫氳繃綾籘hread鍦↗ava鐨勮蔣浠跺寘Java.lang涓瀹氫箟錛屽畠鐨勬瀯閫犳柟娉曚負錛
public Thread 錛圱hreadGroup group錛孯unnable target錛孲tring name錛夛紱
鍏朵腑錛実roup 鎸囨槑璇ョ嚎紼嬫墍灞炵殑綰跨▼緇勶紱target瀹為檯鎵ц岀嚎紼嬩綋鐨勭洰鏍囧硅薄錛屽畠蹇呴』瀹炵幇鎺ュ彛Runnable錛 name涓虹嚎紼嬪悕銆侸ava涓鐨勬瘡涓綰跨▼閮芥湁鑷宸辯殑鍚嶇О錛孞ava鎻愪緵浜嗕笉鍚孴hread綾繪瀯閫犲櫒錛屽厑璁哥粰綰跨▼鎸囧畾鍚嶇О銆傚傛灉name涓簄ull鏃訛紝鍒橨ava鑷鍔ㄦ彁渚涘敮涓鐨勫悕縐般
褰撲笂榪版瀯閫犳柟娉曠殑鏌愪釜鍙傛暟涓簄ull鏃訛紝鎴戜滑鍙寰楀埌涓嬮潰鐨勫嚑涓鏋勯犳柟娉曪細
public Thread 錛堬級錛
public Thread 錛圧unnable target錛夛紱
public Thread 錛圧unnable target錛孲tring name錛夛紱
public Thread 錛圫tring name錛夛紱
public Thread 錛圱hreadGroup group錛孯unnable target錛夛紱
public Thread 錛圱hreadGroup group錛孲tring name錛夛紱
涓涓綾誨0鏄庡疄鐜癛unnable鎺ュ彛灝卞彲浠ュ厖褰撶嚎紼嬩綋錛屽湪鎺ュ彛Runnable涓鍙瀹氫箟浜嗕竴涓鏂規硶 run錛堬級錛
public void run錛堬級錛
浠諱綍瀹炵幇鎺ュ彛Runnable鐨勫硅薄閮藉彲浠ヤ綔涓轟竴涓綰跨▼鐨勭洰鏍囧硅薄錛岀被Thread鏈韜涔熷疄鐜頒簡鎺ュ彛Runnable錛屽洜姝ゆ垜浠鍙浠ラ氳繃涓ょ嶆柟娉曞疄鐜扮嚎紼嬩綋銆
錛堜竴錛夊畾涔変竴涓綰跨▼綾伙紝瀹冪戶鎵跨嚎紼嬬被Thread騫墮噸鍐欏叾涓鐨勬柟娉 run錛堬級錛岃繖鏃跺湪鍒濆嬪寲榪欎釜綾葷殑瀹炰緥鏃訛紝鐩鏍噒arget鍙涓簄ull錛岃〃紺虹敱榪欎釜瀹炰緥瀵規潵鎵ц岀嚎紼嬩綋銆傜敱浜嶫ava鍙鏀鎸佸崟閲嶇戶鎵匡紝鐢ㄨ繖縐嶆柟娉曞畾涔夌殑綾諱笉鑳藉啀緇ф壙鍏跺畠鐖剁被銆
錛堜簩錛夋彁渚涗竴涓瀹炵幇鎺ュ彛Runnable鐨勭被浣滀負涓涓綰跨▼鐨勭洰鏍囧硅薄錛屽湪鍒濆嬪寲涓涓猅hread綾繪垨鑰匱hread瀛愮被鐨勭嚎紼嬪硅薄鏃訛紝鎶婄洰鏍囧硅薄浼犻掔粰榪欎釜綰跨▼瀹炰緥錛岀敱璇ョ洰鏍囧硅薄鎻愪緵綰跨▼浣 run錛堬級銆傝繖鏃訛紝瀹炵幇鎺ュ彛Runnable鐨勭被浠嶇劧鍙浠ョ戶鎵垮叾瀹冪埗綾匯
姣忎釜綰跨▼閮芥槸閫氳繃鏌愪釜鐗瑰畾Thread瀵硅薄鐨勬柟娉時un( )鏉ュ畬鎴愬叾鎿嶄綔鐨勶紝鏂規硶run( )縐頒負綰跨▼浣撱傚浘6.2琛ㄧず浜咼ava綰跨▼鐨勪笉鍚岀姸鎬佷互鍙婄姸鎬佷箣闂磋漿鎹㈡墍璋冪敤鐨勬柟娉曘
鍥6.2 綰跨▼鐨勭姸鎬
1. 鍒涘緩鐘舵(new Thread)
鎵ц屼笅鍒楄鍙ユ椂錛岀嚎紼嬪氨澶勪簬鍒涘緩鐘舵侊細
Thread myThread = new MyThreadClass( );
褰撲竴涓綰跨▼澶勪簬鍒涘緩鐘舵佹椂錛屽畠浠呬粎鏄涓涓絀虹殑綰跨▼瀵硅薄錛岀郴緇熶笉涓哄畠鍒嗛厤璧勬簮銆
2. 鍙榪愯岀姸鎬( Runnable )
Thread myThread = new MyThreadClass( );
myThread.start( );
褰撲竴涓綰跨▼澶勪簬鍙榪愯岀姸鎬佹椂錛岀郴緇熶負榪欎釜綰跨▼鍒嗛厤浜嗗畠闇鐨勭郴緇熻祫婧愶紝瀹夋帓鍏惰繍琛屽苟璋冪敤綰跨▼榪愯屾柟娉曪紝榪欐牱灝變嬌寰楄ョ嚎紼嬪勪簬鍙榪愯( Runnable )鐘舵併傞渶瑕佹敞鎰忕殑鏄榪欎竴鐘舵佸苟涓嶆槸榪愯屼腑鐘舵侊紙Running )錛屽洜涓虹嚎紼嬩篃璁稿疄闄呬笂騫舵湭鐪熸h繍琛屻傜敱浜庡緢澶氳$畻鏈洪兘鏄鍗曞勭悊鍣ㄧ殑錛屾墍浠ヨ佸湪鍚屼竴鏃跺埢榪愯屾墍鏈夌殑澶勪簬鍙榪愯岀姸鎬佺殑綰跨▼鏄涓嶅彲鑳界殑錛孞ava鐨勮繍琛岀郴緇熷繀欏誨疄鐜拌皟搴︽潵淇濊瘉榪欎簺綰跨▼鍏變韓澶勭悊鍣ㄣ
3. 涓嶅彲榪愯岀姸鎬侊紙Not Runnable錛
榪涘叆涓嶅彲榪愯岀姸鎬佺殑鍘熷洜鏈夊備笅鍑犳潯錛
1) 璋冪敤浜唖leep錛堬級鏂規硶;
2) 璋冪敤浜唖uspend錛堬級鏂規硶;
3) 涓虹瓑鍊欎竴涓鏉′歡鍙橀噺錛岀嚎紼嬭皟鐢╳ait錛堬級鏂規硶;
4) 杈撳叆杈撳嚭嫻佷腑鍙戠敓綰跨▼闃誨;
涓嶅彲榪愯岀姸鎬佷篃縐頒負闃誨炵姸鎬侊紙Blocked錛夈傚洜涓烘煇縐嶅師鍥狅紙杈撳叆/杈撳嚭銆佺瓑寰呮秷鎮鎴栧叾瀹冮樆濉炴儏鍐碉級錛岀郴緇熶笉鑳芥墽琛岀嚎紼嬬殑鐘舵併傝繖鏃跺嵆浣垮勭悊鍣ㄧ┖闂詫紝涔熶笉鑳芥墽琛岃ョ嚎紼嬨
4. 姝諱骸鐘舵侊紙Dead錛
綰跨▼鐨勭粓姝涓鑸鍙閫氳繃涓ょ嶆柟娉曞疄鐜幫細鑷鐒舵挙娑堬紙綰跨▼鎵ц屽畬錛夋垨鏄琚鍋滄錛堣皟鐢╯top()鏂規硶錛夈傜洰鍓嶄笉鎺ㄨ崘閫氳繃璋冪敤stop()鏉ョ粓姝㈢嚎紼嬬殑鎵ц岋紝鑰屾槸璁╃嚎紼嬫墽琛屽畬銆
http://www.bc-cn.net/Article/kfyy/java/jc/200410/83.html