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