Middle — Middle+
Como pode implementar a transmissão de dados usando fluxos?
sobes.tech IA
Resposta da IA
A transferência de dados entre threads em Java pode ser implementada de várias formas:
-
Objetos partilhados com sincronização — os threads trabalham com um objeto comum, cujo acesso é controlado por
synchronized,wait()enotify(). -
Uso de coleções seguras para threads do pacote
java.util.concurrent, por exemplo,BlockingQueue. -
Uso de classes de
java.util.concurrent, comoExchanger,SynchronousQueue, etc.
Exemplo usando BlockingQueue para transferir dados entre threads:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class ProducerConsumerExample {
public static void main(String[] args) {
BlockingQueue<String> queue = new LinkedBlockingQueue<>();
Thread producer = new Thread(() -> {
try {
queue.put("Dados");
System.out.println("Produtor colocou dados");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
Thread consumer = new Thread(() -> {
try {
String data = queue.take();
System.out.println("Consumidor recebeu: " + data);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
producer.start();
consumer.start();
}
}
Neste exemplo, um thread coloca dados na fila, enquanto outro os extrai, e o BlockingQueue garante a segurança entre threads e bloqueia o thread se a fila estiver vazia ou cheia.