我按以下顺序设置了线程的优先级
先是A然后是B,然后是C。但是当我在下面的程序中运行时,有时B在A之前运行。我不理解这种执行方式,因为我将B的优先级设置为小于A的优先级。
public class AThread implements Runnable{ public void run(){ System.out.println("In thread A"); }} public class BThread implements Runnable { public void run(){ System.out.println("In thread B"); } } public class CThread implements Runnable { public void run(){ System.out.println("In thread C"); } } public class ThreadPriorityDemo { public static void main(String args[]){ AThread A = new AThread(); Thread tA = new Thread(A); BThread B = new BThread(); Thread tB = new Thread(B); CThread C = new CThread(); Thread tC = new Thread(C); tA.setPriority(Thread.MAX_PRIORITY); tC.setPriority(Thread.MIN_PRIORITY); tB.setPriority(tA.getPriority() -1); System.out.println("A started"); tA.start(); System.out.println("B started"); tB.start(); System.out.println("C started"); tC.start(); }
}
线程优先级可能不是您认为的那样。
线程的优先级是对操作系统的建议,在涉及这两个线程的任何调度或CPU分配决策点中,一个线程优先于另一个线程。但是,如何实现这一点取决于操作系统和JVM的实现。
JavaMex对线程优先级进行了很好的讨论。要点是:
之后一定要阅读下一篇文章,该文章向您展示如何在Linux和Windows上完成它。
我 认为 您的问题可能出自上述第三点(如果您在Windows上运行),但这可能是其他任何原因。