Java線程優先級示例代碼。本站提示廣大學習愛好者:(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();
}
}