小编典典

通过设置优先级来执行线程

java

我按以下顺序设置了线程的优先级

先是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();

}

}


阅读 233

收藏
2020-11-26

共1个答案

小编典典

线程优先级可能不是您认为的那样。

线程的优先级是对操作系统的建议,在涉及这两个线程的任何调度或CPU分配决策点中,一个线程优先于另一个线程。但是,如何实现这一点取决于操作系统和JVM的实现。

JavaMex对线程优先级进行了很好的讨论。要点是:

  1. 优先级可能根本没有效果。
  2. 优先级是只有 一个 计算该使然调度的一部分。
  3. 实际上,可以将不同的Java优先级值转换为相同的值(例如,优先级10和9可以相同)。
  4. 每种操作系统都会自行决定如何处理优先级,因为Java使用的是底层操作系统的线程机制。

之后一定要阅读下一篇文章,该文章向您展示如何在Linux和Windows上完成它。

认为 您的问题可能出自上述第三点(如果您在Windows上运行),但这可能是其他任何原因。

2020-11-26