Fix already queued (#471)

This commit is contained in:
IzzelAliz 2022-02-05 18:50:22 +08:00
parent 42a0da8be8
commit 8503aab61c
No known key found for this signature in database
GPG Key ID: EE50E123A11D8338

View File

@ -1,25 +1,27 @@
package io.izzel.arclight.common.mod.util; package io.izzel.arclight.common.mod.util;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
public class ArclightCallbackExecutor implements Executor, Runnable { public class ArclightCallbackExecutor implements Executor, Runnable {
private Runnable queued; private final Queue<Runnable> queue = new ConcurrentLinkedQueue<>();
@Override @Override
public void execute(Runnable runnable) { public void execute(Runnable runnable) {
if (queued != null) { queue.add(runnable);
throw new IllegalStateException("Already queued");
}
queued = runnable;
} }
@Override @Override
public void run() { public void run() {
Runnable task = queued; for (;;) {
queued = null; var poll = queue.poll();
if (task != null) { if (poll != null) {
task.run(); poll.run();
} else {
return;
}
} }
} }
} }