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("当前线程序被中断"); //} } } } }