Fix already queued (#471)
This commit is contained in:
parent
42a0da8be8
commit
8503aab61c
|
@ -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<Runnable> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user