Студенты, которые использовали программное обеспечение для загрузки Bit, должны четко понимать, что у нас одновременно выполняется несколько задач загрузки, и одна или несколько из них очень важны, поэтому мы устанавливаем высокий приоритет для этих задач, чтобы задачи могли получить большую пропускную способность. завершит загрузку как можно раньше. Приоритеты потоков Java аналогичны. Чем выше приоритет, тем больше времени выполнения процессора ему предоставит планировщик. Однако обратите внимание: если несколько потоков ожидают блокировки машины, это не означает, что чем выше приоритет, тем выше приоритет. чем больше у него будет времени выполнения ЦП, тем быстрее он может быть выполнен.
Скопируйте код кода следующим образом:
импортировать 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 пять ведер риса
* @блог http://blog.csdn.net/mq612
*/
публичный класс TestMain расширяет JFrame {
Private MyThread [] thread = null // Поток для работы;
частная панель JPanel = null;
Private JButton startButton = null, stopButton = null // Кнопки начала и завершения;
общественный TestMain() {
super("Приоритет потока");
панель = новый JPanel();
поток = новый MyThread[10];
for(int i = 0; i < 10; i++){ // Минимальный приоритет потока — 1, максимальный — 10
поток [я] = новый MyThread (я + 1);
}
startButton = новая JButton («Выполнить»);
startButton.addActionListener(новый ActionListener(){
общественный недействительный actionPerformed (ActionEvent e) {
for(int я = 0; я <10; я++){
поток[я].start();
}
}
});
stopButton = новая JButton («Конец»);
stopButton.addActionListener(новый ActionListener(){
общественный недействительный actionPerformed (ActionEvent e) {
for(int я = 0; я <10; я++){
поток[i].quit();
}
}
});
JPanel p = новый JPanel();
p.add(startButton);
p.add(stopButton);
this.getContentPane().add(панель);
this.getContentPane().add(p, BorderLayout.NORTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 300);
this.setLocationRelativeTo(null);
this.setVisible(истина);
}
/**
* Встречная нить
*/
класс MyThread расширяет поток {
частный JTextField text = null // счетчик;
частный int я = 0 // счетчик
частный int приоритет = 0 // приоритет;
частная метка JLabel = null // метка приоритетного отображения;
Private boolean b = true // логическая переменная, управляющая концом потока;
общественный MyThread (интервал приоритета) {
this.priority = приоритет;
this.setPriority(приоритет);
JPanel p = новый JPanel();
label = new JLabel("Priority=" + Priority);
текст = новый JTextField(12);
p.add(метка);
p.add(текст);
pane.add(p); // Добавляем свой счетчик на панель главного окна
}
/**
* Конец ветки
*/
общественный недействительный выход () {
б = ложь;
}
общественный недействительный запуск () {
в то время как (б) {
this.text.setText(Integer.toString(i++));
пытаться {
this.sleep(1); // Уменьшение количества миллисекунд может облегчить нам наблюдение за результатами
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String [] args){
новый TestMain();
}
}