Conteúdo adicional:
Sincronização e Comunicação entre Threads
Problema: Threads podem interferir umas nas outras ao acessar dados compartilhados.
Solução:
Métodos sincronizados
synchronized void synchronizedMethod() {
// Código sincronizado
}
Blocos sincronizados:
synchronized (this) {
// Código sincronizado
}
Exemplo de Comunicação:
Comunicação entre threads usando wait(), notify() e notifyAll():
class SharedResource {
private boolean flag = false;
synchronized void produce() {
while (flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Producing...");
flag = true;
notify();
}
synchronized void consume() {
while (!flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Consuming...");
flag = false;
notify();
}
}
public class ThreadCommunication {
public static void main(String[] args) {
SharedResource resource = new SharedResource();
Thread producer = new Thread(resource::produce);
Thread consumer = new Thread(resource::consume);
producer.start();
consumer.start();
}
}
Conclusão
- A programação com várias threads em Java permite criar aplicativos mais eficientes, principalmente em sistemas multicore.
- É importante gerenciar corretamente o acesso a recursos compartilhados usando sincronização.
- Os métodos da classe Thread e a interface Runnable são ferramentas poderosas para trabalhar com multitarefa.
Top comments (0)