From 8503aab61cde9d1adc59f83695cfa244fa830560 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sat, 5 Feb 2022 18:50:22 +0800 Subject: [PATCH] Fix already queued (#471) --- .../mod/util/ArclightCallbackExecutor.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightCallbackExecutor.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightCallbackExecutor.java index d32a234d..5b633d9a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightCallbackExecutor.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightCallbackExecutor.java @@ -1,25 +1,27 @@ package io.izzel.arclight.common.mod.util; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Executor; public class ArclightCallbackExecutor implements Executor, Runnable { - private Runnable queued; + private final Queue queue = new ConcurrentLinkedQueue<>(); @Override public void execute(Runnable runnable) { - if (queued != null) { - throw new IllegalStateException("Already queued"); - } - queued = runnable; + queue.add(runnable); } @Override public void run() { - Runnable task = queued; - queued = null; - if (task != null) { - task.run(); + for (;;) { + var poll = queue.poll(); + if (poll != null) { + poll.run(); + } else { + return; + } } } }