Bit ダウンロード ソフトウェアを使用したことのある生徒は、複数のダウンロード タスクが同時に実行されており、そのうちの 1 つ以上が非常に重要であるため、タスクがより多くの帯域幅を取得できるように、これらのタスクに高い優先順位を設定していることを明確に理解しているはずです。できるだけ早くダウンロードを完了します。 Java スレッドの優先順位も同様です。優先順位が高いほど、スケジューラーはより多くの CPU 実行時間を与えます。ただし、マシンのロックを待機しているスレッドが複数ある場合、それは優先順位が高いことを意味するわけではありません。 CPU 実行時間が長くなるほど、より早く実行できるようになります。
次のようにコードをコピーします。
インポートjava.awt.BorderLayout;
インポートjava.awt.event.ActionEvent;
インポート java.awt.event.ActionListener;
javax.swing.JButton をインポートします。
javax.swing.JFrameをインポートします。
javax.swing.JLabel をインポートします。
javax.swing.JPanelをインポートします。
インポートjavax.swing.JTextField;
/**
* スレッドの優先順位
※ 10 個のカウンタースレッドには異なる優先度が設定されており、カウンターの蓄積により優先度の影響を観察します。
* @author 米バケツ 5 杯
* @ブログ http://blog.csdn.net/mq612
*/
パブリック クラス TestMain extends JFrame {
private MyThread [] thread = null // 操作対象のスレッド;
プライベート JPanel ペイン = null;
private JButton startButton = null, stopButton = null; // 開始ボタンと終了ボタン
public TestMain(){
super("スレッドの優先順位");
ペイン = 新しい JPanel();
スレッド = 新しい MyThread[10];
for(int i = 0; i < 10; i++){ // スレッド優先度の最小値は 1、最大値は 10 です
thread[i] = 新しい MyThread(i + 1);
}
startButton = new JButton("実行");
startButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < 10; i++){
スレッド[i].start();
}
}
});
stopButton = new JButton("End");
stopButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < 10; i++){
スレッド[i].quit();
}
}
});
JPanel p = new JPanel();
p.add(スタートボタン);
p.add(停止ボタン);
this.getContentPane().add(ペイン);
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;
プライベート int i = 0;
private int 優先度 = 0;
private JLabel label = null; //優先表示ラベル
private boolean b = true // スレッドの終了を制御するブール変数。
public MyThread(int priority){
this.priority = 優先度;
this.setPriority(優先度);
JPanel p = new JPanel();
label = new JLabel("Priority=" + priority);
テキスト = 新しい JTextField(12);
p.add(ラベル);
p.add(テキスト);
pane.add(p); // 独自のカウンターをメイン ウィンドウ パネルに追加します。
}
/**
* スレッド終了
*/
public void quit(){
b = 偽;
}
public void run(){
一方(b){
this.text.setText(Integer.toString(i++));
試す {
this.sleep(1); // ここでミリ秒数を減らすと、結果を観察しやすくなります。
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String [] args){
新しい TestMain();
}
}