java语言 百分网手机站

Java优先级线程代码示例

时间:2020-11-28 15:45:03 java语言 我要投稿

Java优先级线程代码示例

  使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载。Java线程的'优先级也差不多,优先级越高排程器就会给它越多的CPU执行时间,但请注意:如果有多个线程在等待一个机锁的时候,并不是优先级越高就可以越早执行。

  复制代码 代码如下:

  import java.awt.BorderLayout;

  import java.awt.event.ActionEvent;

  import java.awt.event.ActionListener;

  import javax.swing.JButton;

  import javax.swing.JFrame;

  import javax.swing.JLabel;

  import javax.swing.JPanel;

  import javax.swing.JTextField;

  /**

  * 线程的优先级

  * 10个计数器线程分别被设置了不同的优先级,我们通过计数器的累加来观察优先级的作用

  * @author 五斗米

  * @blog http://blog.csdn.net/mq612

  */

  public class TestMain extends JFrame {

  private MyThread [] thread = null; // 要操作的线程

  private JPanel pane = null;

  private JButton startButton = null, stopButton = null; // 启动、结束按钮

  public TestMain(){

  super("线程的优先级");

  pane = new JPanel();

  thread = new MyThread[10];

  for(int i = 0; i < 10; i++){ // 线程的优先级最小是1,最大是10

  thread[i] = new MyThread(i + 1);

  }

  startButton = new JButton("执行");

  startButton.addActionListener(new ActionListener(){

  public void actionPerformed(ActionEvent e) {

  for(int i = 0; i < 10; i++){

  thread[i].start();

  }

  }

  });

  stopButton = new JButton("结束");

  stopButton.addActionListener(new ActionListener(){

  public void actionPerformed(ActionEvent e) {

  for(int i = 0; i < 10; i++){

  thread[i].quit();

  }

  }

  });

  JPanel p = new JPanel();

  p.add(startButton);

  p.add(stopButton);

  this.getContentPane().add(pane);

  this.getContentPane().add(p, BorderLayout.NORTH);

  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  this.setSize(500, 300);

  this.setLocationRelativeTo(null);

  this.setVisible(true);

  }

  /**

  * 计数器线程

  */

  class MyThread extends Thread{

  private JTextField text = null; // 计数器

  private int i = 0; // 计数器

  private int priority = 0; // 优先级

  private JLabel label = null; // 优先级显示标签

  private boolean b = true; // 控制线程结束的boolean变量

  public MyThread(int priority){

  this.priority = priority;

  this.setPriority(priority);

  JPanel p = new JPanel();

  label = new JLabel("Priority=" + priority);

  text = new JTextField(12);

  p.add(label);

  p.add(text);

  pane.add(p); // 将自己的计数器加入主窗口面板中

  }

  /**

  * 结束线程

  */

  public void quit(){

  b = false;

  }

  public void run(){

  while(b){

  this.text.setText(Integer.toString(i++));

  try {

  this.sleep(1); // 减小这里的毫秒数,可以让我们更容易观察到结果

  } catch (InterruptedException ex) {

  ex.printStackTrace();

  }

  }

  }

  }

  public static void main(String [] args){

  new TestMain();

  }

  }

【Java优先级线程代码示例】相关文章:

1.Java线程同步的优先级介绍

2.java中通用的线程池实例代码

3.关于循环的java代码示例

4.java构造函数实现代码示例

5.java多线程介绍

6.java多线程教程

7.java常用代码

8.什么是java主线程