摘要:一線程優(yōu)先級(jí)線程優(yōu)先級(jí)的范圍是,默認(rèn)優(yōu)先級(jí)是,線程優(yōu)先級(jí)的主要作用是讓調(diào)度器優(yōu)先調(diào)度高優(yōu)先級(jí)線程,但這不意味著低優(yōu)先級(jí)線程得不到執(zhí)行,通常情況不需要修改線程優(yōu)先級(jí),類中有個(gè)優(yōu)先級(jí)的常量二源碼分析線程所屬的線程組設(shè)置的級(jí)別不能大于且不能小于設(shè)
一、線程優(yōu)先級(jí)
線程優(yōu)先級(jí)的范圍是1~10,默認(rèn)優(yōu)先級(jí)是5,線程優(yōu)先級(jí)的主要作用是讓調(diào)度器優(yōu)先調(diào)度高優(yōu)先級(jí)線程,但這不意味著低優(yōu)先級(jí)線程得不到執(zhí)行,通常情況不需要修改線程優(yōu)先級(jí),Thread類中有3個(gè)優(yōu)先級(jí)的常量:
二、源碼分析
public final void setPriority(int newPriority) { ThreadGroup g;//線程所屬的線程組 checkAccess(); //設(shè)置的級(jí)別不能大于10且不能小于1 if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) { throw new IllegalArgumentException(); } if((g = getThreadGroup()) != null) { //設(shè)置的級(jí)別不能大于所屬線程組的最大級(jí)別 if (newPriority > g.getMaxPriority()) { newPriority = g.getMaxPriority(); } setPriority0(priority = newPriority);//本地方法 } }
三、線程優(yōu)先級(jí)示例
public class ThreadPrioritiesDemo extends Thread { private int priority; public ThreadPrioritiesDemo(String name, int priority) { super(name); this.priority = priority; } public static void main(String[] args) { Thread t1 = new ThreadPrioritiesDemo("thread1", 1); Thread t2 = new ThreadPrioritiesDemo("thread2", 10); t1.start(); t2.start(); } @Override public void run() { Thread.currentThread().setPriority(priority); for (int i = 0; i < 1000; i++) { System.out.println(this + ":" + i); if (i % 2 == 0) Thread.yield(); } } }
輸出結(jié)果(截取部分):
Thread[thread1,1,main]:670 Thread[thread2,10,main]:293 Thread[thread2,10,main]:294 Thread[thread1,1,main]:671 Thread[thread1,1,main]:672 Thread[thread2,10,main]:295 Thread[thread2,10,main]:296 Thread[thread1,1,main]:673 Thread[thread1,1,main]:674 Thread[thread2,10,main]:297 Thread[thread2,10,main]:298 Thread[thread1,1,main]:675 Thread[thread1,1,main]:676 Thread[thread2,10,main]:299
3.1、結(jié)果說(shuō)明
新開啟2個(gè)線程,線程1優(yōu)先級(jí)為1,線程2優(yōu)先級(jí)為10,兩個(gè)線程交替執(zhí)行,高優(yōu)先級(jí)線程(t2)并不是一直優(yōu)先于t1執(zhí)行
四、總結(jié)
高優(yōu)先級(jí)線程并不是一直優(yōu)于低優(yōu)先級(jí)線程執(zhí)行
歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67861.html
摘要:多線程和并發(fā)問(wèn)題是技術(shù)面試中面試官比較喜歡問(wèn)的問(wèn)題之一。線程可以被稱為輕量級(jí)進(jìn)程。一個(gè)守護(hù)線程是在后臺(tái)執(zhí)行并且不會(huì)阻止終止的線程。其他的線程狀態(tài)還有,和。上下文切換是多任務(wù)操作系統(tǒng)和多線程環(huán)境的基本特征。 多線程和并發(fā)問(wèn)題是 Java 技術(shù)面試中面試官比較喜歡問(wèn)的問(wèn)題之一。在這里,從面試的角度列出了大部分重要的問(wèn)題,但是你仍然應(yīng)該牢固的掌握J(rèn)ava多線程基礎(chǔ)知識(shí)來(lái)對(duì)應(yīng)日后碰到的問(wèn)題。(...
摘要:線程可以被稱為輕量級(jí)進(jìn)程。一個(gè)守護(hù)線程是在后臺(tái)執(zhí)行并且不會(huì)阻止終止的線程。其他的線程狀態(tài)還有,和。上下文切換是多任務(wù)操作系統(tǒng)和多線程環(huán)境的基本特征。在的線程中并沒(méi)有可供任何對(duì)象使用的鎖和同步器。 原文:Java Multi-Threading and Concurrency Interview Questions with Answers 翻譯:并發(fā)編程網(wǎng) - 鄭旭東 校對(duì):方騰飛 多...
線程池ExecutorService 一. new Thread的弊端 執(zhí)行一個(gè)異步任務(wù)你還只是如下new Thread嗎? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就太out了,...
摘要:系統(tǒng)級(jí)線程核心級(jí)線程由操作系統(tǒng)內(nèi)核進(jìn)行管理。值得注意的是多線程的存在,不是提高程序的執(zhí)行速度。實(shí)現(xiàn)多線程上面說(shuō)了一大堆基礎(chǔ),理解完的話。虛擬機(jī)的啟動(dòng)是單線程的還是多線程的是多線程的。 前言 之前花了一個(gè)星期回顧了Java集合: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Map集合、散列表、紅黑樹介紹 HashMap就是這么簡(jiǎn)單【源碼剖析】 LinkedHashMa...
閱讀 2707·2021-11-25 09:43
閱讀 2792·2021-11-04 16:09
閱讀 1785·2021-10-12 10:13
閱讀 934·2021-09-29 09:35
閱讀 939·2021-08-03 14:03
閱讀 1829·2019-08-30 15:55
閱讀 3063·2019-08-28 18:14
閱讀 3653·2019-08-26 13:43