Conceito:
- É possível criar múltiplas threads em um programa Java.
- Cada thread é uma instância independente de execução que compartilha os recursos da CPU.
- A execução das threads pode não seguir a ordem de criação devido ao agendador do sistema.
Passos para criar várias threads:
Implementar a interface Runnable:
- Define o método run() que contém o código que será executado pela thread.
Criar threads com a classe Thread:
- Use o construtor da classe Thread para associar o objeto Runnable.
- Inicie a execução da thread com o método start().
Gerenciar execução simultânea:
- As threads executam de forma assíncrona e podem compartilhar o tempo de CPU.
// Implementa Runnable para criar uma thread
class MyThread implements Runnable {
Thread thrd;
// Construtor que inicializa a thread com um nome
MyThread(String name) {
thrd = new Thread(this, name);
thrd.start(); // Inicia a thread
}
// Código a ser executado pela thread
public void run() {
System.out.println(thrd.getName() + " starting.");
try {
for (int count = 0; count < 10; count++) {
Thread.sleep(400); // Pausa por 400ms
System.out.println("In " + thrd.getName() + ", count is " + count);
}
} catch (InterruptedException exc) {
System.out.println(thrd.getName() + " interrupted.");
}
System.out.println(thrd.getName() + " terminating.");
}
}
// Classe principal
class MoreThreads {
public static void main(String args[]) {
System.out.println("Main thread starting.");
// Criação de três threads filhas
MyThread mt1 = new MyThread("Child #1");
MyThread mt2 = new MyThread("Child #2");
MyThread mt3 = new MyThread("Child #3");
// Executando ações na thread principal
for (int i = 0; i < 50; i++) {
System.out.print(".");
try {
Thread.sleep(100); // Pausa por 100ms
} catch (InterruptedException exc) {
System.out.println("Main thread interrupted.");
}
}
System.out.println("Main thread ending.");
}
}
Saída esperada (exemplo):
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
.In Child #1, count is 0
In Child #2, count is 0
In Child #3, count is 0
....In Child #1, count is 1
In Child #2, count is 1
In Child #3, count is 1
...
Child #1 terminating.
Child #2 terminating.
Child #3 terminating.
............Main thread ending.
Pontos importantes:
Execução simultânea:
- As threads compartilham o tempo de CPU e executam de forma intercalada.
- A ordem de execução não é garantida.
Métodos úteis:
- Thread.sleep(ms): Suspende a execução da thread atual por um tempo especificado.
Agendamento de threads:
- O agendador de threads decide qual thread será executada a qualquer momento.
Conclusão:
Criar várias threads é útil para executar tarefas simultaneamente.
A saída do programa pode variar devido ao comportamento do agendador de threads.
Source link
lol