下面有幾種方法可以很好的控制線程的執行。
1.join 執行緒控制
2.後台執行緒(守護執行緒)
3.sleep執行緒睡眠
4.yield執行緒讓步
1.join 執行緒控制。
thread提供了讓乙個執行緒等待另外乙個執行緒完成的方法-------join()方法
意思:當在a程式執行流(執行緒)中呼叫b執行緒的jion()方法,呼叫者(a)就會被阻塞(出於凍結狀態),直到jion()
執行緒(b)被執行完為止。
jion() 方法經常被使用執行緒的程式呼叫,以將大問題劃分為很多小問題,每個小問題分配乙個執行緒,當所有的小問題得到處理後,在呼叫主線程來進一步操作。
package myclass;
public class jointhread extends thread
//重寫run()方法,定義執行緒執行體
public void run()
}public static void main(string args)throws exception //一定要丟擲異常或者try join(),方法。
system.out.println(thread.currentthread() + " " + x);}}}
這個程式一共啟動了三個執行緒,分別為 st2執行緒、st1執行緒、主線程。
剛開始,三個執行緒快速切換執行,等到主線程執行到x=20時候,主線程進入阻塞(凍結)狀態,st1執行緒和st2執行緒進行快速切換執行。直到st2執行緒執行完畢,主線程才會執行。
2.後台執行緒
這種執行緒在後台執行,主要任務是為其他執行緒提供服務,這種執行緒就是守護執行緒(daemon thread).jvm就是最經典的守護執行緒(後台執行緒)。
後台執行緒的特徵就是:所有執行緒都死亡時候,後台執行緒就會自動死亡。
通過setdaemon(true) 方法將執行緒設定成為後台執行緒。
當整個程式只剩下後台執行緒時,虛擬機器也會退出,
package myclass;
public class daemonthread extends thread
}
在上面的程式中,本來主線程和t執行緒都會執行到100,但是將t執行緒設定成為守護執行緒以後,主線程是裡面的唯一乙個前台執行緒,當主線程結束後,守護執行緒也會自動死亡,虛擬機器退出。(守護執行緒和其他執行緒一樣)public static void main(string args)
}
注意:守護執行緒應該在start()方法之前設定。
3.執行緒睡眠
如果想讓當前正在執行的執行緒暫停 一段時間,進入阻塞狀態,則呼叫thread類中的靜態方法sleep()來說實現。
當前執行緒呼叫sleep()方法後,會進入阻塞狀態,不會或得執行權,因此用sleep()來暫停程式的執行。
package myclass;
public class sleeptest extends thread//不需要繼承thread類}}
4.靜態方法yield ()
它也可以讓正在執行的執行緒暫停,但是不是進入阻塞狀態,而是進入就緒狀態(等待cpu賦給執行權)
當呼叫yield()執行後,只有優先順序和當前優先順序相同或者高於當前優先順序的出於就緒狀態的執行緒會被排程出來執行。
package myclass;
public class yieldtest extends thread
public void run()
}public static void main(string args)
}在預設的情況下,一般都是5 norm_priority
最低位1 min_priority
最高位10 max_priority
thread類通過setpriority(int newpriority)、getpriority()來設定和返回指定執行緒的優先順序。
執行緒控制 join執行緒
在我們做專案的時候時常會有這樣的一種需求 我們需要執行兩個方法,乙個方法要等另乙個方法執行完才能執行,這樣的狀況放到多執行緒中要怎麼實現呢?今天就來看看多執行緒中的join方法。我們的均方法通常是把乙個大問題分成許多小問題,每個小問題分配乙個執行緒,當所有的小問題都得到處理後,在呼叫主線程來進一步操...
執行緒控制與執行緒分離
一 執行緒控制 1 執行緒概念 執行緒是資源排程的基本單位,執行緒是程序內部的乙個執行流,在程序的位址空間內執行。在linux 下沒有真正意義上的執行緒,執行緒是用程序模擬的,又被稱為輕量級程序。2 執行緒資源 乙個程式中的多個執行緒共享同一位址空間,因此 段,資料段內容是共享的。除此之外,以下內容...
執行緒建立以及執行緒控制
在linux下pcb模擬實現程序,通俗的說就是乙個大的pcb下有很多小的pcb,稱為輕量級程序。在乙個程序中有多個pcb,而這些所有的pcb共用同乙份虛擬位址空間。而這些pcb共同基層構成乙個pcb組,乙個執行緒組就為乙個程序。3.乙個執行緒是程式執行的基本單位,程序是資源排程的基本單位。執行緒是c...