线程调度

import java.awt.*;
import javax.swing.*;

public class PriorityTest extends JFrame {
   Thread threadA;                                        //分别申明4个Thread引用
   Thread threadB;
   Thread threadC;
   Thread threadD;

   public PriorityTest() {
      getContentPane().setLayout(new GridLayout(4, 1));   //getContentPane()将窗体转换为一个容器
      JProgressBar progressBar1 = new JProgressBar();     //setLayout()设置窗体布局为4行1列的网格布局
      JProgressBar progressBar2 = new JProgressBar();
      JProgressBar progressBar3 = new JProgressBar();     //分别创建4个进度条JProgressBar
      JProgressBar progressBar4 = new JProgressBar();       
      getContentPane().add(progressBar1);                 //将4个进度条加入到窗体容器
      getContentPane().add(progressBar2);
      getContentPane().add(progressBar3);
      getContentPane().add(progressBar4);
      progressBar1.setStringPainted(true);                //setStringPainted(true)设置进度条显示提示信息
      progressBar2.setStringPainted(true);
      progressBar3.setStringPainted(true);
      progressBar4.setStringPainted(true);
                                                          //构建一个实现了Runnable接口的对象myThread
      //MyThread myThread = new MyThread(progressBar1);   //创建一个新线程threadA--start()--run()后-生命结束
      //threadA = new Thread(myThread);                   //但是myThread对象还在内存中--如果希望也释放--这样
      
      threadA = new Thread(new MyThread(progressBar1));   //用创建匿名对象的方法来创建新的线程
      threadB = new Thread(new MyThread(progressBar2));   //这样一旦线程结束-所有与该线程有关的资源都成为垃圾
      threadC = new Thread(new MyThread(progressBar3));   //java会在特定的时间内自动回收
      threadD = new Thread(new MyThread(progressBar4));
      threadA.setPriority(8);   threadB.setPriority(6);   //setPriority设置线程优先级别1~10级--理论上优先级高
      threadC.setPriority(3);   threadD.setPriority(1);   //先运行--仅表达了程序员的愿望--JVM线程调度会照顾这
      threadA.start();          threadB.start();          //种愿望--但不会绝对保证--可能会选择低级别线程运行
      threadC.start();          threadD.start();          //以避免饥饿(Starvation)
   }
      
   public static void main(String[] args) {
      PriorityTest frame = new PriorityTest();                 //实例化PriorityTest-创建一个JFrame窗口
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置窗口关闭方式-释放-退出程序
      frame.setSize(600,160);
      frame.setVisible(true);
      frame.setLocationRelativeTo(null);                       //设置窗体居中
   }
    
   private final class MyThread implements Runnable {          //定义一个实现Runnable接口的类
      JProgressBar bar;
      int count = 0;
      private MyThread(JProgressBar bar) {
     this.bar = bar;
      }
      public void run() {                                      //重写run()方法
     while (true) {
        for(long i=0;i<=1000000000;i++);
            bar.setValue(count += 1);                          //setValue()设置滚动条的值(每次自增1)
        //try {
        //Thread.sleep(1000);                          //设置线程睡眠时间1秒-也决定了进度条快慢
        //} catch (InterruptedException e) {
        //System.out.println("当前线程序被中断");
        //}
     }
      }
   }
}
原文地址:https://www.cnblogs.com/ljs-666/p/7976890.html