線程的屬性
包括線程:
- 編號(ID)
- 名稱(Name)
- 線程類別(Daemon)
- 優先級(Priority)
線程編號ID:類型long,用於標識不同的線程,編號唯一性只存在java虛擬機的一次運行有效
線程名稱Name:類型String,默認Thread-線程編號,設置該屬性有助於線程調試和問題定位。
線程類別Daemon:類型boolean,值為true表示該線程為守護線程,否則為用戶線程,默認值與相應線程的父線程該屬性值相同,該屬性必須在線程啟動前設置!否則會報錯
優先級Priority:類型int,該屬性本質上是給線程調度器的提示,用於表示應用程序那個線程優先運行。java定義了1~10的10個優先級別。默認值為5(普通優先級別)。對應一個具體的線程而言,優先級別的默認值與父線程相同。
注:線程並不保證執行順序按優先級進行!優先級使用不當可能導致某些線程用於無法得到運行!一般情況下不設置即可。
用戶線程(User Thread)和守護線程(Daemon):
用戶線程會阻止Java虛擬機的正常停止,即一個Java虛擬機只有在其所有的用戶線程運行都結束的情況下才能正常停止。
守護線程不會影響Java虛擬機的正停止,即應用程序中有守護線程在運行也不會影響Java虛擬機的正常停止。因此守護線程通常用於執行一些重要性不是很高的任務,如監視其他線程的運行情況。
線程常用方法:
currentThread(): 返回當前線程,當前代碼的執行線程
void run(): 實現線程任務處理邏輯
void start(): 啟動相應線程
void join(): 等待相應線程結束,若線程A調用B的join法法,那么線程A會被暫停,直到線程B運行結束。
static void yield(): 使當前線程自動放棄對處理器的占用,可能導致當前線程被暫停
注:此方法不可靠,被調用時線程仍可能繼續運行!(視系統而定)
static void sleep(long millis):使當前線程休眠指定時間
簡易定時器:
public class SimpleTimer {
private static int count;
public static void main(String[] args) {
count = args.length >= 1 ? Integer.valueOf(args[0]) : 60;
int remaining;
while (true) {
remaining = countDown();
if (0 == remaining) {
break;
} else {
System.out.println("Remaining " + count + " second(s)");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// 什么也不做;
}
}
System.out.println("Done.");
}
private static int countDown() {
return count--;
}
}
