6.7Java多线程优先级(priority)

6.7Java多线程优先级(priority)

Java线程调度特点

  • 提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程

  • 线程调度器按照线程的优先级决定应调度哪个线程来执行

  • 线程的优先级范围:

    • Thread.MIN PRIORITY = 1
    • Thread.MAX PRIORITY = 10
    • Thread NORM PRIORITY = 5

获得或设置线程对象的优先级

int getPriority();
void setPriority(int newPriority);

特点:

  • 优先级设定建议再start调用之前

  • 优先级低只是获得调度的概率低,不是绝对先调用优先级高的线程后调用优先级低的线程

线程状态特点:
package iostudy.priority;

/**
* 测试线程的优先级1-10
* 1、Normal priority--->默认是5,所有线程默认的值都是5
* 2、Min priority--->1
* 3、Max priority--->10
*/
public class PriorityTest {
   public static void main(String[] args) {
       /*获取线程等级*/
       System.out.println(Thread.currentThread().getPriority());

       /*创建线程实现类对象*/
       MyPriority myPriority = new MyPriority();
       /*创建代理类对象*/
       Thread t1 = new Thread(myPriority);
       /*创建多个线程*/
       Thread t2 = new Thread(myPriority, "秃笔南玻万");
       Thread t3 = new Thread(myPriority, "秃笔南博兔");
       Thread t4 = new Thread(myPriority, "秃笔南玻思锐");
       Thread t5 = new Thread(myPriority, "秃笔南玻佛");
       Thread t6 = new Thread(myPriority, "秃笔南玻fai务");

       /*设置线程优先级,并且设置再启动之前*/
       t1.setPriority(Thread.MAX_PRIORITY);
       t2.setPriority(Thread.MAX_PRIORITY);
       t3.setPriority(Thread.MIN_PRIORITY);
       t4.setPriority(Thread.MIN_PRIORITY);
       t5.setPriority(Thread.MAX_PRIORITY);
       t6.setPriority(Thread.MAX_PRIORITY);

       /*启动线程--->调用start方法*/
       t1.start();
       /*多线程启动*/
       t2.start();
       t3.start();
       t4.start();
       t5.start();
       t6.start();
       /*
       待会创建多个线程
       并且需要设置线程优先级
       优先级不代表绝对的线程执行先后顺序
       优先级高只代表执行的时间片可能多一些、早一些
        */
  }
}

/**
* 创建线程类
* @since JDK 1.8
* @date 2021/6/7
* @author Lucifer
*/
class MyPriority implements Runnable{

   /*重写run方法*/
   @Override
   public void run(){
       System.out.println(Thread.currentThread().getName() + "--->" + Thread.currentThread().getPriority());
       /*线程礼让*/
       Thread.yield();
  }
}

 

posted @ 2021-06-07 21:19  俊king  阅读(141)  评论(0编辑  收藏  举报