Потеря соединения JDBC с CompletableFuture и SemaphoreJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Потеря соединения JDBC с CompletableFuture и Semaphore

Сообщение Anonymous »

Я пытаюсь обрабатывать два объекта одновременно, поэтому хотел использовать семафор.
Сначала я покажу свой предыдущий рабочий код. Это не гарантирует одновременное выполнение двух потоков, даже если в пуле потоков всего два потока.

Код: Выделить всё

CompletableFuture taskFuture = idList.stream()
.map(id -> (Runnable) () -> processEntity(startTime, id))
.map(task -> CompletableFuture.runAsync(task, executorService))
.collect(Collectors.collectingAndThen(Collectors.toList(),
tasks -> CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0]))));

taskFuture.get();
Пересмотренная логика работы с семафором выглядит следующим образом:

Код: Выделить всё

var semaphore = new StreamSemaphore(MAX_CONCURRENT_EXECUTIONS);
var futureTasks = itemList.stream()
.map(semaphore::acquire)
.map(itemId -> (Supplier) () -> processItem(startTime, itemId))
.map(task -> CompletableFuture.supplyAsync(task, taskExecutor)
.thenAccept(semaphore::release)
.exceptionally(e -> {
log.error("Exception occurred while processing item", e);
System.exit(1);
return null;
}))
.toList();
futureTasks.forEach(TaskProcessor::safeGet);
где находится StreamSemaphore

Код: Выделить всё

public class StreamSemaphore {
private final Semaphore sema;

public StreamSemaphore(int slots) {
sema = new Semaphore(slots);
}

@SneakyThrows
public  T acquire(T obj) {
sema.acquire();
return obj;
}

@SneakyThrows
public  T release(T obj) {
sema.release();
return obj;
}
}
После обработки первых двух объектов выдается ошибка
Изображение


Подробнее здесь: https://stackoverflow.com/questions/793 ... -semaphore
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Потеря соединения JDBC с CompletableFuture и Semaphore
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Потеря соединения JDBC при использовании CompletableFuture, Executor и Semaphore
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Потеря соединения JDBC при использовании CompletableFuture, Executor и Semaphore
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Ограничение параллелизма в потоках с помощью CompletableFuture и Semaphore
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Ограничение параллелизма в потоках с помощью CompletableFuture и Semaphore
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»