Os alunos que usaram o software de download Bit devem deixar bem claro que temos várias tarefas de download executadas ao mesmo tempo, e uma ou mais delas são muito importantes, por isso definimos uma alta prioridade para essas tarefas para que as tarefas possam obter mais largura de banda conclui o download o mais cedo possível. As prioridades dos threads Java são semelhantes. Quanto maior a prioridade, mais tempo de execução da CPU o agendador concederá. No entanto, observe: se houver vários threads aguardando um bloqueio da máquina, isso não significa que quanto maior a prioridade, quanto mais tempo de execução da CPU ele terá, mais cedo poderá ser executado.
Copie o código do código da seguinte forma:
importar java.awt.BorderLayout;
importar java.awt.event.ActionEvent;
importar java.awt.event.ActionListener;
importar javax.swing.JButton;
importar javax.swing.JFrame;
importar javax.swing.JLabel;
importar javax.swing.JPanel;
importar javax.swing.JTextField;
/**
* Prioridade do tópico
* Os 10 threads de contadores são configurados com prioridades diferentes. Observamos o efeito das prioridades através do acúmulo de contadores.
* @author cinco baldes de arroz
* @blog http://blog.csdn.net/mq612
*/
classe pública TestMain estende JFrame {
private MyThread [] thread = null; // Thread para operar
painel JPanel privado = null;
private JButton startButton = null, stopButton = null; // Botões de início e fim
publicTestMain(){
super("Prioridade do tópico");
painel = novo JPanel();
thread = new MeuThread[10];
for(int i = 0; i < 10; i++){ // A prioridade mínima do thread é 1 e a máxima é 10
thread[i] = new MeuThread(i + 1);
}
startButton = new JButton("Executar");
startButton.addActionListener(novo ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < 10; i++){
thread[i].start();
}
}
});
stopButton = new JButton("Fim");
stopButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < 10; i++){
thread[i].quit();
}
}
});
JPanel p = novo 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(nulo);
this.setVisible(verdadeiro);
}
/**
* Contador de linha
*/
classe MyThread estende Thread{
private JTextField text = null; // contador
privado int i = 0;
prioridade int privada = 0;
rótulo JLabel privado = null; //rótulo de exibição de prioridade
private boolean b = true; // variável booleana que controla o final do thread
public MyThread(int prioridade){
this.priority = prioridade;
this.setPriority(prioridade);
JPanel p = novo JPanel();
rótulo = new JLabel("Prioridade=" + prioridade);
texto = novo JTextField(12);
p.add(rótulo);
adicionar(texto);
pane.add(p); // Adicione seu próprio contador ao painel da janela principal
}
/**
*Tópico final
*/
público void sair(){
b = falso;
}
execução nula pública(){
enquanto(b){
this.text.setText(Integer.toString(i++));
tentar {
this.sleep(1); // Reduzir o número de milissegundos aqui pode facilitar a observação dos resultados.
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String [] args){
novoTestMain();
}
}