Решение проблемы producer-consumer с помощью семафоров

Решение проблемы producer-consumer с помощью семафоров




🛑🛑🛑 ПОДРОБНЕЕ ЖМИТЕ ЗДЕСЬ 👈🏻👈🏻👈🏻

































Я пытаюсь реализовать простой producer-consumer в Java, используя семафор.
Я уже нашел очень хорошую статью о использовании семафора, но мне нужно сделать это более сложным, чем просто создание нескольких потоков, которые получают доступ к семафору и выполняют одну и ту же задачу.
Вот что я пытаюсь сделать:
Есть два потока, один из которых создает несколько объектов, а другой поток удаляет эти объекты из хранилища.
У меня есть два потока, которые выполняют одну и ту же работу.
Оба потока должны быть в состоянии делать это одновременно.
Я использую семафор для решения этой проблемы.
Каждый поток имеет семафор.
Первый поток должен ждать, пока семафор не будет готов для использования.
Второй поток может использовать семафор, если он свободен, иначе он должен подождать.
Это может быть сделано с помощью одного семафора.
Я пытаюсь использовать семафор для решения проблемы Producer-Consumer.
В принципе, я хочу иметь два потока, один из которых получает данные из базы данных, а другой передает их для использования в приложении.
Я создал класс, который реализует Runnable и создает два потока.
Вот код:
public class DataProcessingThread implements Runnable { private final Thread thread; private String data;
DataProcessingThread(String data) { this.data = data; } @
Override public void run() { //
У меня есть два класса, которые используют один и тот же буфер:
public class Producer { //
The producer is responsible for sending to the consumer
private volatile boolean send = false; //
Producer is the only thread that can add to the buffer
private Queue queue = new LinkedList();
public void add(String str) {
if (queue.size() > 0) {
Queue oldQueue = queue;
queue = new LinkedBlockingQueue(oldQueue);
synchronized (oldQueue) { //
У меня есть 2 класса, которые я хочу, чтобы иметь возможность совместно использовать некоторые данные, но в то же время, я хотел бы, чтобы контролировать доступ к этим данным.
Я могу справиться с этим, если данные хранятся в базе данных.
Но я пытаюсь сделать что-то более чистое и более модульное.
Вот класс, который я использовал, чтобы попытаться решить эту проблему:
Я пытаюсь реализовать решение producer-producer и consumer-consumer, используя семафор.
Мне удалось реализовать это, но мне интересно, есть ли более простой способ сделать это.
Я знаю, что семафор не может быть синхронизирован, но есть ли другой способ сделать этот подход?
import java.util.concurrent.Semaphore; import java.util.*; import java.io.*;
Я пытаюсь получить метод, чтобы быть простым и эффективным.
У меня есть два класса, которые имеют дело с потоковой передачей данных.
Один из них является "Producer", а другой - "Consumer".
Они оба используют семафор для блокировки потока ввода-вывода.
Таким образом, они могут работать параллельно, но только один поток может обрабатывать данные в данный момент времени.
Я пытаюсь написать приложение для обучения, которое состоит из пары producer-consumer.
У меня есть несколько потоков, которые выполняют разные задачи, и я хочу, чтобы они имели доступ к общей переменной, поэтому, когда один поток получает сообщение, он передает его другому потоку, который должен что-то сделать.
Проблема в том, что потоки, которые должны что-то делать, должны быть синхронизированы, а также я не уверен, как правильно использовать семафор.
В основном, я буду делать это:
Я работаю над проектом, в котором у меня есть два потока, которые обмениваются данными, поэтому я думал, что мне понадобится семафор.
У меня есть следующий код, чтобы показать, как это работает.
У меня есть несколько потоков, которые работают на одном и том же объекте, производя различные типы объектов, но не все из них делают это одновременно.
Я хочу разрешить только один поток на объект и позволить другим потокам на нем.
Например, у меня есть объект, который работает как:
public class MyObject {
private static Set myObjects = new HashSet();
public void addMyObject() { ... myObjects.add(this); }
public boolean isMyObjectPresent() { return myObjects.contains(this);
Эссе Нефтегазовое Дело
Создание информации.
Организационное Проектирование Реферат

Report Page