谈谈线程优先级的高低和执行顺序的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈线程优先级的高低和执行顺序的关系相关的知识,希望对你有一定的参考价值。

class test extends Thread public test (String str) super(str); public void run() for(int i=0;i<10;i++) System.out.println(getName()); public class ThreadTest public static void main(String []args) test t1=new test("Thread1"); test t2=new test("Thread2"); test t3=new test("Thread3"); t1.setPriority(2); t2.setPriority(5); t3.setPriority(8); t1.start(); t2.start(); t3.start(); 三个线程优先级不同,但是为何不按照优先级从高到低的顺序执行(输出)?请给出几种不同结果,分析原因。另外,假如三个线程优先级都相同,运行结果将会和上述情况有何区别?请给出原因。

参考技术A 如果高优先级的,被堵截了,可能就不按照高低的执行了。如果低优先级的正在执行,高优先级的过来要抢占执行的话,就会出现堵截,低的退不出来,高的还要进去,这是处理机制有可能随机执行,要么还可能出现,两个程序都运行不了。
三个优先级都一样的话就跟好办了,线程分配实际就是cpu为不同的运行随机分配时间片段,但优先级高的先执行,所以说应该是随机的。

线程优先级的高低和执行顺序的关系

线程的调度由操作系统负责,即使是编译器也没办法完全包办。也即是说,运行时轮到哪个线程运行,

完全由操作系统决定,优先级高的,只是轮到机会高一些,并非完全独占CPU运行;

优先级低的也并非要等高优先级的线程运行完才能轮到,相对来说,轮到的机率低一些。

如果是VxWorks这样的实时系统,那么优先级高表示优先得到响应(这时候它不一定在执行,也可以在睡眠);
Linux系统优先级高表示它越倾向于IO消耗型,那么它在中断到来时肯定要尽快投入运行,但是相对CPU消耗型来说,

实际上它肯定是等待的时候更多,所以优先级高和执行先后没有什么关系。

以上是关于谈谈线程优先级的高低和执行顺序的关系的主要内容,如果未能解决你的问题,请参考以下文章

JAVA多线程优先级运行顺序的问题

关于Java线程

关于线程执行顺序的问题

[jS 事件循环理解] 主线程 宏任务 微任务 - 执行顺序优先级理解

多线程:Operation

JAVA锁