Middle — Middle+
Как може да се реализира пренос на данни с помощта на потоци?
sobes.tech AI
Отговор от AI
Прехвърлянето на данни между нишки в Java може да бъде реализирано по няколко начина:
-
Общи обекти с синхронизация — нишките работят с общ обект, към който достъпът се контролира чрез
synchronized,wait()иnotify(). -
Използване на безопасни за нишки колекции от пакета
java.util.concurrent, напримерBlockingQueue. -
Използване на класове от
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 гарантира безопасността между нишките и блокира нишката, ако опашката е празна или пълна.