Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAÇÃO
AVANÇADA
Multithreading - Criação de Threads
Threads
¨ Thread é um processo leve e é
a unidade básica de utilização
da CPU
¨ É leve porque só tem
registradores e espaço de
pilha; o código, dados globais
e demais recursos, são
compartilhados
¨ Um processo pesado
(heavyweight) pode ter uma ou
mais threads (multithread)
¨ O compartilhamento faz com
que o overhead das threads
seja mínimo
Como criar threads em Java?
¨ Duas formas:
1) estender a classe Thread e
sobrescrevemos o seu método run() ou;
2) implementar uma classe a partir da
interface Runnable, escrevemos o método
run() e passamos essa classe ao construtor
da classe Threads
Exemplo 1
¨ No exemplo 1, vamos criar uma classe geral e que,
dentro dela, haverá uma classe interna (estática),
chamada Runner, que é a classe que implementa a
thread, estendendo a classe Thread e
sobrescrevendo o método run()
¨ A funcionalidade deste exemplo é que cada thread
imprima 5 vezes a string “Hello” + nome da thread,
com um intervalo de 500 ms entre cada
¨ Interno à classe principal (dentro do método main)
serão gerados duas threads (mas pode-se gerar
muito mais do que isso)
Exemplo 1
:: Estendendo a classe Thread
Hello: 0 Thread: 9
Hello: 1 Thread: 9
Hello: 2 Thread: 9
Hello: 3 Thread: 9
Hello: 4 Thread: 9
Exemplo 7
:: Threads anônimas (Thread)
¨ No exemplo 7, vamos reapresentar o conceito de
thread anônima, dessa vez estendendo a classe Thread
¨ Relembrando que este conceito é utilizada em casos
bastante específicos onde você não vai reutilizar esta
thread em lugar algum
¨ Da mesma forma que o exemplo anterior, a
funcionalidade desta thread anônima será imprimir
cinco vezes (com um intervalo de 100ms) a mensagem
“Hello” + valor do contador + “Thread” + identificador
da thread
Exemplo 7
:: Threads anônimas (Thread)
Hello: 0 Thread: 9
Hello: 1 Thread: 9
Hello: 2 Thread: 9
Hello: 3 Thread: 9
Hello: 4 Thread: 9
Exemplo 8
¨ No exemplo 8, vamos mostrar que uma thread pode
receber parâmetros. Serão definidas quatro threds
¨ Este exemplo estende a classe Thread
¨ A funcionalidade de cada thread será receber um
parâmetro numérico (value). Internamente, cada thread
executará um loop na variável i, de 0 até 19, e
imprimirá uma mensagem contendo o nome da thread
se i for divisível por value
Exemplo 8
:: Threads com parâmetros
class RunnerArg extends Thread {
private int value;
public RunnerArg (int val) {
this.value = val;
}
public void run() {
for (int i = 0; i < 20; i++) {
if (i%value==0) {
System.out.println(Thread.currentThread().getName() +
": " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
}
}
}
Exemplo 8
:: Threads com parâmetros