0% acharam este documento útil (0 voto)
195 visualizações28 páginas

06 - PROG AVANCADA Threads - Mauricio

O documento discute programação concorrente em Java utilizando threads. Apresenta duas formas de se programar threads: herdando a classe Thread ou implementando a interface Runnable. Explica conceitos como escalonamento, métodos para controle de execução e exemplos práticos de programação de threads.

Enviado por

JOE MAMA
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
195 visualizações28 páginas

06 - PROG AVANCADA Threads - Mauricio

O documento discute programação concorrente em Java utilizando threads. Apresenta duas formas de se programar threads: herdando a classe Thread ou implementando a interface Runnable. Explica conceitos como escalonamento, métodos para controle de execução e exemplos práticos de programação de threads.

Enviado por

JOE MAMA
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 28

Programação Avançada

Prof. Maurício Aldenor

2022
Thread
Antigamente: Windows 3.14
Thread

Objetivo: executar duas ou mais tarefas ao mesmo tempo


(processamento paralelo).

Em Java podemos querer executar 2 ou mais threads ao mesmo


tempo, ou seja, 2 ou mais procedimentos internos do programa
ao mesmo tempo.
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

Formas de programar thread (linhas de instruções) no Java:


1) Herdando a classe java.lang.Thread
2) Implementando a interface java.lang.Runnable
Thread

Métodos da classe Thread para controlar a execução


1) start(): inicia a execução da thread;
2) yield(): para a execução da thread corrente e começa a
execução de outra thread que estava esperando ser executada;
3) sleep(x): suspende a thread por x milissegundos;
4) wait(): deixa a thread esperando até que seja reativada
por outra thread.
Thread

Forma 1 – Herdando a classe Thread


class Processo1 extends Thread { Este método está
sendo sobrescrito
public void run( ) {
System.out.println( "Thread usada: "
+ Thread.currentThread( ).getName( )
);
}
}
Thread

Forma 2 – implementando a interface Runnable


class Processo2 implements Runnable {
Este método está
public void run( ) { sendo implementado
(também sobrescrito)
System.out.println( "Thread usada: "
+ Thread.currentThread( ).getName( )
);
}
}
Thread
Utilizando a Thread (herança):
Na classe que contém o
class ProjetoThread { método principal...

public static void main( String args[ ] )


{
Thread t1 = new Processo1( );
t1.setName( “Processo com herança” );
t1.start( ); Inicia a thread! Pode ser
executada só uma vez
}
}
Thread
Utilizando a Thread (interface):
Na classe que contém o
class ProjetoThread { método principal...

public static void main( String args[ ] ){


//códigos do slide anterior...
Thread t2 = new Thread( new Processo2( ),
“Processo com interface” );
t2.start( );
} Inicia a thread! Pode ser
executada só uma vez
}
Thread
Exercício 1 - Vamos programar duas threads básicas...
1. No Netbeans, crie um projeto chamado ProjetoThread_01;
2. Crie duas classes:
• Processo1 (herda a classe Thread)
• Processo2 (implementa a interface Runnable)
3. Digitar o que foi mostrado nos slides anteriores em cada classe
4. Programe o método main( ) para rodar as Threads
5. Execute o projeto
Programação Avançada
Prof. Maurício Aldenor

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

[email protected]

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

3) Classe Janela - método montarPainel()


• Para cada JProgressBar:
• setForeground(Color.RED), setBackground(Color.WHITE),
setValue(0), setPreferredSize(new Dimension(350, 30)),
setStringPainted(true).
• Adicionar cada JProgressBar no painel. Exemplo:
• painel.add(barra1);
Thread
Tarefa 1 - Ajuda para solução

4) Classe Janela - método goThreads()


• Criar uma Thread para cada barra:
• Thread t1 = new Thread( new ThreadBarra(barra1, 10) );
• ...
• Chamar o método start() para cada Thread. Exemplo:
• t1.start();
• ...
• Testar chamando o método run(). Exemplo:
• t1.run();
• ...
Thread
Tarefa 1 - Ajuda para solução

5) Classe que contém o método main()


• Criar um objeto da classe Janela;
• Chamar o método montarJanela() da classe Janela, através do objeto
criado.

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.

Você também pode gostar