Sobes.tech
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:

  1. Objetos partilhados com sincronização — os threads trabalham com um objeto comum, cujo acesso é controlado por synchronized, wait() e notify().

  2. Uso de coleções seguras para threads do pacote java.util.concurrent, por exemplo, BlockingQueue.

  3. Uso de classes de java.util.concurrent, como Exchanger, 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.