【java】【多執行緒】睡眠/守護/加入/禮讓執行緒,執行緒優先順序(4)
一、休眠執行緒--sleep()
Thread.sleep(毫秒,納秒):控制當前執行緒休眠若干毫秒,遇到就會睡著時間到了就會自動醒來繼續執行
靜態方法:類名.方法呼叫
注意:1秒= 1000毫秒,1秒 = 1000 * 1000 * 1000=1000000000納秒,因此windows系統對納秒的支援不夠好,因此用毫秒。
- 若在主執行緒中使用sleep(),則會中斷異常,需丟擲。
- 若使用Thread或者Runable建立執行緒,因為父類的run方法中沒有出現異常,因此子類裡也不執行出現異常直接丟擲,而是需要自己捕獲進行處理try-catch
new Thread() {
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println(getName() + "...aa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
二、守護執行緒
setDaemon(boolean):設定一個執行緒為守護執行緒, 該執行緒不會單獨執行, 當其他非守護執行緒都執行結束後, 自動退出
解釋:任何一個守護執行緒都是整個JVM中所有非守護執行緒的保姆:
- 只要當前JVM例項中尚存在任何一個非守護執行緒沒有結束,守護執行緒就全部工作;只有當最後一個非守護執行緒結束時,守護執行緒隨著JVM一同結束工作。
- Daemon的作用是為其他執行緒的執行提供便利服務,守護執行緒最典型的應用就是 GC (垃圾回收器),它就是一個很稱職的守護者。
Thread t1 = new Thread() {
public void run() {
for(int i = 0; i < 50; i++) {
System.out.println(getName() + "...aaaaaaaaaaaaaaaaaaaaaa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
for(int i = 0; i < 5; i++) {
System.out.println(getName() + "...bb");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t1.setDaemon(true); //將t1設定為守護執行緒,只要t2執行完畢,t1就不會再執行
t1.start();
t2.start();
三、加入執行緒
Thread. join():當前執行緒暫停, 等待指定的執行緒執行結束後, 當前執行緒再繼續 。插隊操作。
注意:匿名內部類在使用所在方法中的區域性變數時,必須用final修飾。
final Thread t1 = new Thread() {
public void run() {
for(int i = 0; i < 50; i++) {
System.out.println(getName() + "...aaaaaaaaaaaaaaaaaaaaaa");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
for(int i = 0; i < 50; i++) {
if(i == 2) {
try {
//t1.join(); //插隊,加入,當i=2時,t1加入執行緒,等t1全部執行完畢時再返回t2繼續執行
t1.join(30); //加入,有固定的時間,t1執行30毫秒後,返回此處,t1和t2繼續交替執行
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(getName() + "...bb");
}
}
};
t1.start();
t2.start();
四、禮讓執行緒
yield:讓出cpu,理論上是讓出CPU去處理其他執行緒,但是效果特別不明顯
五、設定執行緒的優先順序
* setPriority():設定執行緒的優先順序,1~10, 效果也不是很明顯
MIN_PRIORITY = 1; 最低優先順序
NORM_PRIORITY = 5; 預設優先順序
MAX_PRIORITY = 10; 最高優先順序
相關文章
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒之守護執行緒實戰Java執行緒
- Java之執行緒的優先順序Java執行緒
- java執行緒之守護執行緒和使用者執行緒Java執行緒
- 多優先順序執行緒池實踐執行緒
- 【多執行緒與高併發】Java守護執行緒是什麼?什麼是Java的守護執行緒?執行緒Java
- Python執行緒專題10:queue、多執行緒按順序執行Python執行緒
- 守護執行緒執行緒
- Java之守護執行緒Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java中如何保證執行緒順序執行Java執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- 從Java到JVM到OS執行緒的優先順序JavaJVM執行緒
- kafka多執行緒順序消費Kafka執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 多執行緒和多執行緒同步執行緒
- 多執行緒之初識執行緒執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- Java多執行緒(一)多執行緒入門篇Java執行緒
- 執行緒的睡眠執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java 多執行緒基礎(四)執行緒安全Java執行緒