大佬的理解-> JavaIO
| setPriority(int newPriority) | 更改執行緒的優先級 |
|---|---|
| static void sleep(long millis) | 讓當前正在執行的執行緒在指定的毫秒數內休眠 |
| join() | 等待該執行緒終止(插隊) |
| static void yield() | 暫停當前正在執行的執行緒物件,并執行其他執行緒(禮讓 |
| interript() | 中斷執行緒 |
| isAlive() | 測驗執行緒是否處于活動那個狀態 |
1、setPriority(int newPriority)
更改執行緒的優先級;
優先級
| 取值范圍 | [1,10] 值越小,優先級越小 |
|---|---|
| MAX_PRIORITY = 10; | 最大優先級10 |
| NORM_PRIORITY = 5; | 默認優先級5 |
| MIN_PRIORITY = 1; | 最小優先級1 |
注意
優先級高的執行緒并不一定就比優先級低的先獲得cpu資源,只是獲得cpu資源的概率比較大,具體還要看cpu的調度演算法;
設定優先級案例
public class MyThreadPriority implements Runnable{
@Override
public void run() {
//執行緒執行的業務方法
System.out.println("子執行緒執行");
for (int i = 0;i < 5;i++){
System.out.println("--- 執行緒名---:"+Thread.currentThread().getName()+",序號:"+i);
}
}
public static void main(String[] args) {
//創建執行緒并設定執行緒名和優先級
Thread thread1 = new Thread(new MyThreadPriority(),"執行緒A");
Thread thread2 = new Thread(new MyThreadPriority(),"執行緒B");
//執行緒優先級的取值范圍:[1,10],默認是5,值越小,優先級越小
//設定執行緒優先級,只能代表優先級高的執行緒獲取cpu資源的概率較大,單不是絕對優先,它取決于cpu的調度演算法
thread1.setPriority(Thread.MAX_PRIORITY);
thread2.setPriority(Thread.MIN_PRIORITY);
//啟動執行緒
thread1.start();
thread2.start();
}
運行結果
子執行緒執行
--- 執行緒名---:執行緒A,序號:0
--- 執行緒名---:執行緒B,序號:0
--- 執行緒名---:執行緒A,序號:1
--- 執行緒名---:執行緒A,序號:2
--- 執行緒名---:執行緒A,序號:3
--- 執行緒名---:執行緒A,序號:4
--- 執行緒名---:執行緒B,序號:1
--- 執行緒名---:執行緒B,序號:2
--- 執行緒名---:執行緒B,序號:3
--- 執行緒名---:執行緒B,序號:4
2、 sleep(long millis)
執行緒休眠
//休眠一秒
Thread.sleep(1000); //單位毫秒
//TimeUnit.MILLISECONDS.sleep(1000); //單位毫秒
//TimeUnit.SECONDS.sleep(1); //單位毫秒
3、join()
強制加入子執行緒,誰呼叫join的方法,誰加入,當前執行緒會暫停,等待加入的子執行緒運行結束才可以繼續執行;
join案例
//強制加入執行執行緒:必須要等呼叫了join方法的執行緒執行結束,必然發生
public class MyThreadJoin implements Runnable{
@Override
public void run() {
//執行緒執行的業務方法
System.out.println("子執行緒執行");
for (int i = 0;i < 3;i++){
System.out.println("--- 執行緒名---:"+Thread.currentThread().getName()+",序號:"+i);
try {
//休眠一秒
// Thread.sleep(1000);
// TimeUnit.MILLISECONDS.sleep(1000);
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//創建一個子執行緒物件
Thread thread = new Thread(new MyThreadJoin(), "強制Join執行緒");
//啟動子執行緒
thread.start();
//主執行緒
System.out.println("***主執行緒執行***");
System.out.println("***執行緒名***:"+Thread.currentThread().getName());
try {
System.out.println("---主執行緒中強制加入子執行緒,繼續執行---");
//強制加入子執行緒,誰呼叫join的方法,誰加入,當前執行緒會暫停,等待加入的子執行緒運行結束才可以繼續執行;
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("---主執行緒執行結束---");
}
}
運行結果
***主執行緒執行***
子執行緒執行
***執行緒名***:main
---主執行緒中強制加入子執行緒,繼續執行--- //子執行緒join后主執行緒要等子執行緒執行完成才可以繼續執行
--- 執行緒名---:強制Join執行緒,序號:0
--- 執行緒名---:強制Join執行緒,序號:1
--- 執行緒名---:強制Join執行緒,序號:2
---主執行緒執行結束---
4、yield()
執行緒禮讓:提供一種禮讓的可能,但是不能保證絕對禮讓,是一個概率事件(可能讓,可能不讓);
yield案例
//執行緒禮讓:提供一種禮讓的可能,但是不能保證絕對禮讓,是一個概率事件
public class MyThreadYield implements Runnable{
@Override
public void run() {
//執行緒執行的業務方法
System.out.println("子執行緒執行");
for (int i = 0;i < 10;i++){
System.out.println("--- 執行緒名---:"+Thread.currentThread().getName()+",序號:"+i);
//當執行到第6次,執行禮讓
if(i ==5){
System.out.println("==="+Thread.currentThread().getName()+"禮讓===");
Thread.yield();
//靜態方法,通過執行緒物件呼叫
}
}
}
public static void main(String[] args) {
MyThreadYield myThreadYield = new MyThreadYield();
//創建子執行緒并啟動
new Thread(myThreadYield,"執行緒1").start();
new Thread(myThreadYield,"執行緒2").start();
new Thread(myThreadYield,"執行緒3").start();
}
}
運行結果
子執行緒執行
子執行緒執行
子執行緒執行
--- 執行緒名---:執行緒1,序號:0
--- 執行緒名---:執行緒2,序號:0
--- 執行緒名---:執行緒1,序號:1
--- 執行緒名---:執行緒3,序號:0
--- 執行緒名---:執行緒1,序號:2
--- 執行緒名---:執行緒2,序號:1
--- 執行緒名---:執行緒1,序號:3
--- 執行緒名---:執行緒3,序號:1
===執行緒1禮讓===
--- 執行緒名---:執行緒2,序號:2 //執行緒3變成了執行緒2,禮讓了
--- 執行緒名---:執行緒1,序號:4
--- 執行緒名---:執行緒3,序號:2
--- 執行緒名---:執行緒1,序號:5
--- 執行緒名---:執行緒2,序號:3
--- 執行緒名---:執行緒1,序號:6
--- 執行緒名---:執行緒3,序號:3
--- 執行緒名---:執行緒1,序號:7
===執行緒2禮讓===
--- 執行緒名---:執行緒1,序號:8 //還是執行緒1,沒有發生禮讓
===執行緒3禮讓===
--- 執行緒名---:執行緒1,序號:9 //還是執行緒1,沒有發生禮讓
--- 執行緒名---:執行緒2,序號:4
--- 執行緒名---:執行緒3,序號:4
--- 執行緒名---:執行緒2,序號:5
--- 執行緒名---:執行緒3,序號:5
--- 執行緒名---:執行緒2,序號:6
--- 執行緒名---:執行緒3,序號:6
--- 執行緒名---:執行緒2,序號:7
--- 執行緒名---:執行緒3,序號:7
--- 執行緒名---:執行緒2,序號:8
--- 執行緒名---:執行緒3,序號:8
--- 執行緒名---:執行緒2,序號:9
--- 執行緒名---:執行緒3,序號:9
所以執行緒禮讓是一種概率事件;
5、interript()
執行緒中斷;
6、isAlive()
測驗執行緒是否處于活動那個狀態;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/494130.html
標籤:Java
上一篇:Golang介面型函式使用技巧
