Sobes.tech
Middle — Middle+

Как може да се реализира пренос на данни с помощта на потоци?

sobes.tech AI

Отговор от AI

Прехвърлянето на данни между нишки в Java може да бъде реализирано по няколко начина:

  1. Общи обекти с синхронизация — нишките работят с общ обект, към който достъпът се контролира чрез synchronized, wait() и notify().

  2. Използване на безопасни за нишки колекции от пакета java.util.concurrent, например BlockingQueue.

  3. Използване на класове от java.util.concurrent, като Exchanger, SynchronousQueue и други.

Пример с използване на 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("Данни");
                System.out.println("Производителят постави данни");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        Thread consumer = new Thread(() -> {
            try {
                String data = queue.take();
                System.out.println("Потребител получи: " + data);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

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

В този пример един поток поставя данни в опашката, а друг ги извлича; BlockingQueue гарантира безопасността между нишките и блокира нишката, ако опашката е празна или пълна.