當前位置:
首頁 >
【Java多线程】线程优先级:优先级高,执行机会多
發布時間:2024/2/28
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
【Java多线程】线程优先级:优先级高,执行机会多
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
常用的優先級
一般來說,優先級的范圍為1-10,但在個別的操作系統上有所不同。
優先級高的線程,在運行的時候將會獲得更多的運行機會。
代碼
package cn.hanquan.test;import java.io.FileNotFoundException;/** 優先級高的線程 獲得更多的運行機會*/public class TestP {public static void main(String[] args) throws InterruptedException, FileNotFoundException {// 我的線程類MyP mp = new MyP();// 建立線程數組Thread t1 = new Thread(mp);Thread t2 = new Thread(mp);t1.setPriority(1);t2.setPriority(10);t1.start();t2.start();} }class MyP implements Runnable {@Overridepublic void run() {Thread.yield();for (int i = 0; i < 100; i++) {System.out.println(Thread.currentThread().getName() + " --> Priority " + Thread.currentThread().getPriority());}} }運行結果
Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-1 --> Priority 10 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1 Thread-0 --> Priority 1附:之前錯誤的理解,留著沒刪,是因為里面有建立線程數組的方式,可能會用到。
錯誤之處在于:線程的優先級體現在獲得運行的概率上,而不是體現在開始運行的順序上。
package cn.hanquan.test;import java.io.FileNotFoundException;/** 線程優先級的是 優先級高的先運行的概率大*/public class TestP {public static void main(String[] args) throws InterruptedException, FileNotFoundException {// 我的線程類MyP mp = new MyP();// 建立線程數組Thread[] t = new Thread[100];// 設定線程優先級for (int i = 0; i < 50; i++) {t[i] = new Thread(mp);t[i].setPriority(1);// MIN_PRIORITY}for (int i = 50; i < 100; i++) {t[i] = new Thread(mp);t[i].setPriority(10);// MAX_PRIORITY}// 開啟線程 這里開啟的順序對實際線程的開始順序也有一定的影響// sxt300級中沒有使用數組 好像就沒有這種影響?for (int i = 0; i < 100; i++) {t[i].start();}} }class MyP implements Runnable {@Overridepublic void run() {Thread.yield();System.out.println(Thread.currentThread().getName() + " --> Priority " + Thread.currentThread().getPriority());}}運行結果
運行結果并沒有完全符合預期
但是如果把30行的遞增序改為遞減序,幾乎每一次都是優先級為10的線程先運行,優先級為1的線程后運行,這樣大概可以說明線程優先級對于運行順序的的影響。
總結
以上是生活随笔為你收集整理的【Java多线程】线程优先级:优先级高,执行机会多的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java多线程】Join的使用、如何使
- 下一篇: 【Java线程安全】 synchroni