Java线程优先级示例代码
2013-09-09 11:32
876 查看
使用过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 线程返回值,优先级,后台线程 示例代码
- Java多线程中线程的两种创建方式及比较代码示例
- Java线程同步Lock同步锁代码示例
- [改善Java代码]线程优先级只使用三个等级
- Java中静态代码块,代码块,构造方法优先级、区别及代码示例
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
- Java线程之程安全与不安全代码示例
- java 线程、线程池基本应用示例代码回顾
- java多线程之线程同步七种方式代码示例
- Java线程同步:生产者-消费者 模型(代码示例)
- JAVA线程-示例代码
- Java线程同步:生产者-消费者 模型(代码示例)
- Java线程重复执行以及操作共享变量的代码示例
- java 队列、优先级队列、双向队列示例演示代码
- Java线程同步:生产者-消费者 模型(代码示例)
- java线程间通信的通俗解释及代码示例
- java高级---线程、网络、文件、流、序列化等代码示例
- Java创建与结束线程代码示例
- 如何在Java代码示例中停止线程
- 【JAVA】挂起、恢复和停止线程的示例代码