Sobes.tech
Middle — Middle+

Kaip galima įgyvendinti duomenų perdavimą naudojant srautus?

sobes.tech AI

Atsakymas iš AI

Duomenų perdavimas tarp srautų Java gali būti įgyvendintas keliais būdais:

  1. Bendri objektai su sinchronizacija — srautai dirba su bendru objektu, kurio prieiga kontroliuojama naudojant synchronized, wait() ir notify().

  2. Naudojant saugias srautui kolekcijasjava.util.concurrent paketo, pvz., BlockingQueue.

  3. Naudojant java.util.concurrent klases, tokias kaip Exchanger, SynchronousQueue ir kt.

Pavyzdys naudojant BlockingQueue duomenų perdavimui tarp srautų:

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("Duomenys");
                System.out.println("Kūrėjas įdėjo duomenis");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

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

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

Šiame pavyzdyje vienas srautas įdeda duomenis į eilę, o kitas juos ištraukia; BlockingQueue užtikrina srautų saugumą ir blokuoja srautą, jei eilė yra tuščia arba pilna.