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:
-
Bendri objektai su sinchronizacija — srautai dirba su bendru objektu, kurio prieiga kontroliuojama naudojant
synchronized,wait()irnotify(). -
Naudojant saugias srautui kolekcijas iš
java.util.concurrentpaketo, pvz.,BlockingQueue. -
Naudojant
java.util.concurrentklases, tokias kaipExchanger,SynchronousQueueir 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.