Middle — Middle+
Hogyan valósítható meg az adatok továbbítása folyamatok segítségével?
sobes.tech MI
Válasz az MI-től
Az adatok átadása a Java szálak között többféleképpen valósítható meg:
-
Közös objektumok szinkronizálással — a szálak egy közös objektummal dolgoznak, amelyhez a hozzáférést
synchronized,wait()ésnotify()segítségével ellenőrzik. -
Szálbiztos kollekciók használata a
java.util.concurrentcsomagból, példáulBlockingQueue. -
A
java.util.concurrentosztályok használata, mint példáulExchanger,SynchronousQueueés mások.
Példa a BlockingQueue használatára az adatok szálak közötti átadásához:
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("Adatok");
System.out.println("Gyártó betett adatokat");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
Thread consumer = new Thread(() -> {
try {
String data = queue.take();
System.out.println("Fogyasztó kapott: " + data);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
producer.start();
consumer.start();
}
}
Ebben a példában az egyik szál adatokat helyez el a sorba, a másik pedig kivonja azokat; a BlockingQueue biztosítja a szálbiztonságot, és blokkolja a szálat, ha a sor üres vagy tele van.