Day13_64_线程的优先级

线程的调度

  * 单核CPU在某一时刻只能执行一条指令,线程只有得到CPU的时间片,也就是使用权,才可以执行指令

  * 在单核CPU的机器上线程不是并行运行的,而是频繁切换运行的,只有在多个CPU上线程才可能并行运行。

  * Java虚拟机要负责线程的调度,取得CPU的使用权,目前有两种调度模式:**分时式调度模式**  和  **抢占式调度模式**, **java是后者**

  * 两种调度模式:
  
      - 分时式调度模式:所有线程轮流获得CPU的使用权,平均分配每个线程所占用CPU的时间片

      - 抢占式调度模式:优先让优先级高的线程使用CPU,如果所有线程的优先级相同,会随机选择一个,优先级高的线程获取的CPU时间片相对多一些。

线程的优先级

  • 线程优先级分为三种, 最高优先级是10, 最低优先级是1, 默认优先级是5.

    • MAX_PRIPRITY 最高 System.out.println(Thread.MAX_PRIORITY); 10

    • MIN_PRIORITY 最低 System.out.println(Thread.MIN_PRIORITY); 1

    • NORM_PRIORITY 默认 System.out.println(Thread.NORM_PRIORITY); 5

  • 设置线程的优先级

    • 查看当前线程的优先级: 线程对象.getPriority()

    • 设置线程优先级: 线程对象.setPriority(int newPriority) 例如: t1.setPriority(10); //优先级设置为10 最高优先级

  • 代码实例

      package com.shige.Thread;
    
      public class ThreadTest04 {
          public static void main(String[] args) {
    
              //获取当前线程对象,并重写起一个名字
              Thread.currentThread().setName("主线程");
    
              //创建一个线程对象
              Thread thread=new Thread(new Processor_4());
    
              //给thread线程重新起一个名字
              thread.setName("副线程1");
    
              //创建第二个线程对象
              Thread thread1=new Thread(new Processor_4());
    
              //给thread1线程重新起一个名字
              thread1.setName("副线程2");
    
              //查看当前线程的优先级
              System.out.println(Thread.currentThread().getPriority()); //主线程优先级   5
              System.out.println(thread.getPriority());    //thread线程优先级   5
              System.out.println(thread1.getPriority());   //thread1线程优先级   5
    
    
              //设置线程优先级
              Thread.currentThread().setPriority(1);
              thread.setPriority(10);
              thread1.setPriority(2);
    
    
              //启动线程
               thread.start();
               thread1.start();
    
    
               //主线程 对比for循环
              for (int i = 0; i < 50; i++) {
                  System.out.println(Thread.currentThread().getName()+"------>"+i);
    
              }
    
    
              //优先级常量
    
              System.out.println(Thread.MAX_PRIORITY); //10
              System.out.println(Thread.MIN_PRIORITY); //1
              System.out.println(Thread.NORM_PRIORITY); //5
    
    
        }
    

}


  //定义一个线程,实现Runnable接口
    class Processor_4 implements Runnable{

        //实现run()方法
          @Override
          public void run() {
              for (int i = 0; i <50 ; i++) {

                  //获取当前线程名字,并输出i值
                  System.out.println(Thread.currentThread().getName()+"------------->"+i);

              }
          }
      }


     
     
posted @ 2021-04-08 10:36  失昼  阅读(102)  评论(0)    收藏  举报