06 - PROG AVANCADA Threads - Mauricio
06 - PROG AVANCADA Threads - Mauricio
2022
Thread
Antigamente: Windows 3.14
Thread
Exemplos:
• Mostrar uma barra de progresso, enquanto algum
processamento é realizado;
• Exibir a hora do sistema ou tempo de sessão, enquanto o
usuário o utiliza;
• Mostrar uma imagem, enquanto o sistema é carregado (splash);
• Manipular dados no banco de dados, enquanto escreve ou lê
dados de arquivo de texto (logs).
Thread
2022
Thread
Escalonador de threads (scheduler)
• Somente um processo é executado por vez;
• Todas as threads são armazenadas e o processador fica
alternando a execução delas;
Conjunto de threads: Possível ordem de execução:
t2, t3, t6, t1, t7, t5, t4
t1 t2
t7
t4 t5
t6
t3
Thread
Escalonador de threads (scheduler)
• A troca é feita rapidamente, dando a impressão que a execução
é feita ao mesmo tempo;
• Troca de contexto (context switch): salva o contexto da thread
atual e restaura o da thread que vai ser executada em seguida;
• O processador pode ser mono-núcleo ou multi-núcleo;
• Se a ordem de execução realmente importar, então a utilização
de threads está sendo equivocada!!!
Thread
Exercício 2 - Analisar este comportamento por um programa...
1. No Netbeans, crie um projeto chamado ProjetoEscalonador;
2. Crie uma classe:
• Processo (implementa a interface Runnable)
3. Dentro desta classe, declare um atributo de nome id e do tipo int e
privado. Não se esqueça de criar os métodos de set e get.
4. Dentro do método run(), faça o seguinte laço for:
for (int i = 0; i < 10000; i++) {
System.out.println("Programa " + this.getId() + " valor: " + i);
}
Thread
Exercício 2 - Analisar este comportamento por um programa...
5. Na classe que contém o método main():
a) Criar dois objetos da classe Processo;
b) Para o primeiro objeto, setar o id com valor 1;
c) Para o segundo objeto, setar o id com valor 2;
d) Criar dois objetos da classe Thread, passando no construtor o
objeto da classe Programa;
e) Usar o método start( ) através dos objetos do passo anterior
Thread
Exercício 2 - Analisar este comportamento por um programa...
public static void main(String[] args) {
Programa p1 = new Programa();
Programa p2 = new Programa();
p1.setId(1);
p2.setId(2);
Thread t1 = new Thread(p1);
Thread t2 = new Thread(p2);
t1.start();
t2.start();
}
Thread
Exercício 2 - Analisar este comportamento por um programa...
5. Vamos rodar o programa e analisar o resultado...
...
Programa 1 valor: Verifica-se que a ordem foi
44 escalonada.
Programa 1 valor:
45
Programa 2 valor: 0
Programa 2 valor: 1
Programa 2 valor: 2
Programa 2 valor: 3
Programa 1 valor:
Programação Avançada
Prof. Maurício Aldenor
2021
Thread
Tarefa 1
Baseado nos conceitos de Thread, pesquise como usar a barra de progresso no
Java (JProgressBar) para programar um sistema didático que mostra três barras
de progresso sendo executadas simultaneamen-te. A diferença entre elas deve
ser a cor e a velocidade de carregamento.
Thread
Tarefa 1 - Ajuda para solução
1) Classe ThreadBarra
• Implementar a interface Runnable;
• Sobrescrever o método run();
• Criar dois atributos privados: barra (tipo: JProgressBar) e velocidade
(tipo: int);
• Criar um construtor parametrizado com esses dois atributos;
• Programar uma estrutura de repetição para controlar a barra:
• setString e setValue da barra;
• usar Thread.sleep(velocidade) (lançar a exceção)
Thread
Tarefa 1 - Ajuda para solução
2) Classe Janela
• Herdar da classe JFrame;
• Declarar os atributos: 1 JPanel, 3 JProgressBar;
• Programar o método montarJanela():
• setTitle(...), setSize(400, 300),
setDefaultCloseOperation(EXIT_ON_CLOSE),
setLocationRelativeTo(null), setVisible(true).
• Chamar os métodos montarPainel(), add(painel), goThreads().
(próximos slides)
Thread
Tarefa 1 - Ajuda para solução
EXECUTAR O PROJETO!
Thread
Tarefa 2
Nesta tarefa, você deve criar um sistema em Java que mostre uma
imagem de Splash à medida que determinado processamento acontece.
Você deve simular qualquer processamento.
Thread
Tarefa3
Nesta tarefa, você deve criar um player de música mp3 em Java usando
conceitos de Threads.
Realize pesquisas na internert!
Thread
Referências:
Imasters, How-To: Implementando Threads em Java.
http://imasters.com.br/artigo/20205/java/how-to-implementando-
threads-em-java/?trace=1519021197&source=single <último acesso
abril/2016>
Caelum, Programação Concorrente e Threads.
https://www.caelum.com.br/apostila-java-orientacao-
objetos/programacao-concorrente-e-threads/ <último acesso
abril/2016>
Sierra, K. Use a Cabeça! Java. Alta Books. 2ª edição. 2007.