Sobes.tech
Middle — Middle+

How can data transfer be implemented using streams?

sobes.tech AI

Answer from AI

Data transfer between threads in Java can be implemented in several ways:

  1. Shared objects with synchronization — threads work with a shared object, access to which is controlled using synchronized, wait(), and notify().

  2. Using thread-safe collections from java.util.concurrent, such as BlockingQueue.

  3. Using classes from java.util.concurrent, such as Exchanger, SynchronousQueue, etc.

Example with BlockingQueue:

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("Data");
                System.out.println("Producer put data");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        Thread consumer = new Thread(() -> {
            try {
                String data = queue.take();
                System.out.println("Consumer received: " + data);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        producer.start();
        consumer.start();
    }
}

In this example, one thread puts data into the queue, and another retrieves it, with BlockingQueue ensuring thread safety and blocking the thread if the queue is empty or full.

How can data transfer be implemented using streams… - sobes.tech