• 18.5 线程的优先级


      1、每个线程都具有各自的优先级,线程的优先级可以表明在程序中该线程的重要性,如果有很多线程处于就绪状态,系统会根据优先级来决定首先使哪个线程进入运行状态。但这并不意味着低优先级的线程得不到运行,而只是它运行的几率比较小,如垃圾回收线程的优先级就较低。
      2、Thread类中包含的成员变量代表了线程的某些优先级,如Thread.MIN_PRIORITY(常数1)、Thread.MAX_PRIORITY(常数10)、Thread.NORM_PRIORITY(常数5)。其中每个线程的优先级都在Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间,在默认情况下其优先级都是Thread.NORM_PRIORITY。每个新产生的线程都继承了父线程的优先级。
      3、在多任务操作系统中,每个线程都会得到一小段CPU时间片运行,在时间结束时,将轮换另一个线程进入运行状态,这时系统会选择与当前线程优先级相同的线程予以运行。系统时钟选择就绪状态下优先级较高的线程进入运行状态。处于各个优先级状态下的线程的运行顺序如下图所示:


      4、线程的优先级可以使用setPriority()方法调整,如果使用该方法设置的优先级不在1~10之间,将产生IllegalArgumentException异常。

     1 package com.lzw;
     2 
     3 import java.awt.*;
     4 
     5 import javax.swing.*;
     6 
     7 public class PriorityTest extends JFrame {
     8     /**
     9      * 
    10      */
    11     private static final long serialVersionUID = 1L;
    12     private Thread threadA;
    13     private Thread threadB;
    14     private Thread threadC;
    15     private Thread threadD;
    16     
    17     public PriorityTest() {
    18         getContentPane().setLayout(new GridLayout(4, 1));
    19         // 分别实例化4个线程
    20         final JProgressBar progressBar = new JProgressBar();
    21         final JProgressBar progressBar2 = new JProgressBar();
    22         final JProgressBar progressBar3 = new JProgressBar();
    23         final JProgressBar progressBar4 = new JProgressBar();
    24         getContentPane().add(progressBar);
    25         getContentPane().add(progressBar2);
    26         getContentPane().add(progressBar3);
    27         getContentPane().add(progressBar4);
    28         progressBar.setStringPainted(true);
    29         progressBar2.setStringPainted(true);
    30         progressBar3.setStringPainted(true);
    31         progressBar4.setStringPainted(true);
    32         threadA = new Thread(new MyThread(progressBar));
    33         threadB = new Thread(new MyThread(progressBar2));
    34         threadC = new Thread(new MyThread(progressBar3));
    35         threadD = new Thread(new MyThread(progressBar4));
    36         setPriority("threadA", 5, threadA);
    37         setPriority("threadB", 5, threadB);
    38         setPriority("threadC", 4, threadC);
    39         setPriority("threadD", 3, threadD);
    40     }
    41     
    42     // 定义设置线程的名称、优先级的方法
    43     public static void setPriority(String threadName, int priority,
    44             Thread t) {
    45         t.setPriority(priority); // 设置线程的优先级
    46         t.setName(threadName); // 设置线程的名称
    47         t.start(); // 启动线程
    48     }
    49     
    50     public static void main(String[] args) {
    51         init(new PriorityTest(), 100, 100);
    52     }
    53     
    54     public static void init(JFrame frame, int width, int height) {
    55         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    56         frame.setSize(width, height);
    57         frame.setVisible(true);
    58     }
    59     
    60     private final class MyThread implements Runnable { // 定义一个实现Runnable接口的类
    61         private final JProgressBar bar;
    62         int count = 0;
    63         
    64         private MyThread(JProgressBar bar) {
    65             this.bar = bar;
    66         }
    67         
    68         public void run() { // 重写run()方法
    69             while (true) {
    70                 bar.setValue(count += 10); // 设置滚动条的值每次自增10
    71                 try {
    72                     Thread.sleep(1000);
    73                 } catch (InterruptedException e) {
    74                     System.out.println("当前线程序被中断");
    75                 }
    76             }
    77         }
    78     }
    79     
    80 }
    View Code

  • 相关阅读:
    Java中的经典算法之冒泡排序(Bubble Sort)
    Appium环境搭建(Windows版)
    Jenkins安装与配置
    Jenkins+ANT+Jmeter 接口测试的实践(转载)
    bugku_web_phpcms1(未完待续)
    bugku_web_Bugku-cms1(未完待续)
    牛客网 PAT 算法历年真题 1010 : 月饼 (25)
    【测试的艺术】+ 封装
    【数据库】+ powerdesigner
    【Git】+IDEA中无法使用git命令
  • 原文地址:https://www.cnblogs.com/studycode/p/9582287.html
Copyright © 2020-2023  润新知