public class SPU
extends java.lang.Object
This class solves a complex architectural problem in Swing: manipulating GUI objects (which must happen on the EDT) while performing logic or data operations in background threads, without losing the sequential integrity of the operations.
Standard Swing approaches often lead to deadlocks (calling `invokeAndWait` from EDT) or race conditions (firing background tasks that finish out of order). This utility normalizes the API so that scripts and logic can look the same regardless of whether they are currently running on or off the EDT, and ensures that tasks for a specific component sequence correctly.
The core concept of SPU is the qid (Queue ID).
qid (usually a specific UI Component).qid. This ensures their tasks are
serialized in a single queue.
qid are guaranteed to be "managed" together.qid is null, the task is treated as independent and executed immediately/concurrently.// Fire and forget in background SPU.offEDTv(myComponent, () -> performHeavyCalculation()); // Calculate in background, then update UI (Chaining) SPU.offEDT(myComponent, () -> calculateData()) .thenAccept(data -> SPU.onEDTv(myComponent, () -> updateUI(data))); // Blocking call from a button action (Safe usage) SPU.offEDTAndWait(myComponent, () -> saveToDb()); // Won't freeze UI repaints due to SecondaryLoop usage
Please note that while testing this class without an actual GUI, the secondary EDT might be shut down eagerly,
failing actually any test for onEDTAndWait.
The best way to avoid this is to create a javax.swing.Timer with a timeout < 1000ms.
(See SPUTest for examples).
Runnable/Consumer).SecondaryLoop).| Modifier and Type | Field and Description |
|---|---|
static int |
MAX_SCHEDULE_PER_QID
Controls the parallelism allowed for off-EDT tasks sharing the same QID.
|
static SPU |
S |
static java.lang.String |
SYS_PROP_NAME_PARALLELISM |
| Modifier and Type | Method and Description |
|---|---|
static <T> java.util.concurrent.CompletableFuture<java.lang.Void> |
delayOnEDT(int delay,
java.util.concurrent.TimeUnit unit,
java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
Delays execution of a task on the EDT.
|
static java.util.concurrent.CompletableFuture<java.lang.Void> |
delayOnEDT(int delay,
java.util.concurrent.TimeUnit unit,
java.lang.Object qid,
java.lang.Runnable func) |
static <T> java.util.concurrent.Future<T> |
fork(java.util.concurrent.Callable<T> c)
Submits a Callable to the internal SPU pool.
|
static java.util.concurrent.Future<java.lang.Void> |
forkv(java.lang.Runnable r)
Submits a Runnable to the internal SPU pool.
|
static <T,R> boolean |
invokeAndWaitIfNotOnEDT(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t) |
static boolean |
invokeAndWaitIfNotOnEDT(java.lang.Object qid,
java.lang.Runnable func)
Safely ensures logic runs on the EDT.
|
static boolean |
isEDT() |
static boolean |
isNestedEDT() |
static void |
needsEDT()
Assertion helper.
|
static <T,U,R> java.util.concurrent.CompletableFuture<R> |
offEDT(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u)
Asynchronously executes a BiFunction on a background thread.
|
static <R> java.util.concurrent.CompletableFuture<R> |
offEDT(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
Asynchronously executes a Callable on a background thread.
|
static java.util.concurrent.CompletableFuture<?> |
offEDT(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,R> java.util.concurrent.CompletableFuture<R> |
offEDT(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
Asynchronously executes a Function on a background thread.
|
static <T,U,V,W,X,R> |
offEDT(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y,R> |
offEDT(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z,R> |
offEDT(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A,R> |
offEDT(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W,X,Y,Z,A,B,R> |
offEDT(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b) |
static java.util.concurrent.CompletableFuture<?> |
offEDT(java.lang.Object qid,
java.lang.Object o,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,U,V,W,R> |
offEDT(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w) |
static <T,U,V,R> java.util.concurrent.CompletableFuture<R> |
offEDT(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v) |
static <T,U,R> R |
offEDTAndWait(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u) |
static <R> R |
offEDTAndWait(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
Submits a Callable to run on a background thread and waits for its result.
|
static java.lang.Object |
offEDTAndWait(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,R> R |
offEDTAndWait(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
Submits a Function to run on a background thread and waits for its result.
|
static <T,U,V,W,X,R> |
offEDTAndWait(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y,R> |
offEDTAndWait(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z,R> |
offEDTAndWait(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A,R> |
offEDTAndWait(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W,X,Y,Z,A,B,R> |
offEDTAndWait(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b) |
static java.lang.Object |
offEDTAndWait(java.lang.Object qid,
java.lang.Object o,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,U,V,W,R> |
offEDTAndWait(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w) |
static <T,U,V,R> R |
offEDTAndWait(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v) |
static <T,U> void |
offEDTAndWaitv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
Submits a BiConsumer to run on a background thread and waits for completion.
|
static <T> void |
offEDTAndWaitv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
Submits a Consumer to run on a background thread and waits for completion.
|
static <T,U,V,W,X> |
offEDTAndWaitv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y> |
offEDTAndWaitv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z> |
offEDTAndWaitv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A> |
offEDTAndWaitv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W,X,Y,Z,A,B,R> |
offEDTAndWaitv(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b) |
static <T,U,V,W> void |
offEDTAndWaitv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w) |
static void |
offEDTAndWaitv(java.lang.Object qid,
java.lang.Runnable func)
Submits a background task and waits for it to complete.
|
static <T,U,V> void |
offEDTAndWaitv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v) |
static <T,U> java.util.concurrent.CompletableFuture<java.lang.Void> |
offEDTv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
Asynchronously executes a BiConsumer on a background thread.
|
static <T> java.util.concurrent.CompletableFuture<java.lang.Void> |
offEDTv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
Asynchronously executes a Consumer on a background thread.
|
static <T,U,V,W,X> |
offEDTv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y> |
offEDTv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z> |
offEDTv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A> |
offEDTv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W> java.util.concurrent.CompletableFuture<java.lang.Void> |
offEDTv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w) |
static java.util.concurrent.CompletableFuture<java.lang.Void> |
offEDTv(java.lang.Object qid,
java.lang.Runnable func)
Asynchronously executes a Runnable on a background thread.
|
static <T,U,V> java.util.concurrent.CompletableFuture<java.lang.Void> |
offEDTv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v) |
static <T,U,R> java.util.concurrent.CompletableFuture<R> |
onEDT(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u)
Asynchronously executes a BiFunction on the EDT.
|
static <R> java.util.concurrent.CompletableFuture<R> |
onEDT(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
Asynchronously executes a Callable on the EDT.
|
static java.util.concurrent.CompletableFuture<?> |
onEDT(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,R> java.util.concurrent.CompletableFuture<R> |
onEDT(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
Asynchronously executes a Function on the EDT.
|
static <T,U,V,W,X,R> |
onEDT(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y,R> |
onEDT(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z,R> |
onEDT(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A,R> |
onEDT(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W,X,Y,Z,A,B,R> |
onEDT(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b) |
static java.util.concurrent.CompletableFuture<?> |
onEDT(java.lang.Object qid,
java.lang.Object o,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,U,V,W,R> |
onEDT(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w) |
static <T,U,V,R> java.util.concurrent.CompletableFuture<R> |
onEDT(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v) |
static <T,U,R> R |
onEDTAndWait(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u) |
static <R> R |
onEDTAndWait(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
Submits a Callable to run on the EDT and waits for its result.
|
static java.lang.Object |
onEDTAndWait(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,R> R |
onEDTAndWait(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
Submits a Function to run on the EDT and waits for its result.
|
static <T,U,V,W,X,R> |
onEDTAndWait(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y,R> |
onEDTAndWait(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z,R> |
onEDTAndWait(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A,R> |
onEDTAndWait(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W,X,Y,Z,A,B,R> |
onEDTAndWait(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b) |
static java.lang.Object |
onEDTAndWait(java.lang.Object qid,
java.lang.Object o,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes) |
static <T,U,V,W,R> |
onEDTAndWait(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w) |
static <T,U,V,R> R |
onEDTAndWait(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v) |
static <T,U> void |
onEDTAndWaitv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
Submits a BiConsumer to run on the EDT and waits for completion.
|
static <T> void |
onEDTAndWaitv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
Submits a Consumer to run on the EDT and waits for completion.
|
static <T,U,V,W,X> |
onEDTAndWaitv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y> |
onEDTAndWaitv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z> |
onEDTAndWaitv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A> |
onEDTAndWaitv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W,X,Y,Z,A,B,R> |
onEDTAndWaitv(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b) |
static <T,U,V,W> void |
onEDTAndWaitv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w) |
static void |
onEDTAndWaitv(java.lang.Object qid,
java.lang.Runnable func)
Submits an EDT task and waits for it to complete.
|
static <T,U,V> void |
onEDTAndWaitv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v) |
static <T,U> java.util.concurrent.CompletableFuture<java.lang.Void> |
onEDTv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
Asynchronously executes a BiConsumer on the EDT.
|
static <T> java.util.concurrent.CompletableFuture<java.lang.Void> |
onEDTv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
Asynchronously executes a Consumer on the EDT.
|
static <T,U,V,W,X> |
onEDTv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y> |
onEDTv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z> |
onEDTv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,X,Y,Z,A> |
onEDTv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a) |
static <T,U,V,W> java.util.concurrent.CompletableFuture<java.lang.Void> |
onEDTv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w) |
static java.util.concurrent.CompletableFuture<java.lang.Void> |
onEDTv(java.lang.Object qid,
java.lang.Runnable func)
Asynchronously executes a Runnable on the EDT.
|
static <T,U,V> java.util.concurrent.CompletableFuture<java.lang.Void> |
onEDTv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v) |
static java.lang.String |
qidToString(java.lang.Object qid) |
static java.util.concurrent.ScheduledFuture<?> |
schedule(java.lang.Runnable func,
long millis) |
static java.util.concurrent.Future<?> |
submitSpareTimeJob(java.lang.Runnable func) |
static void |
syncEDT() |
static void |
syncEDT(java.lang.Object qid) |
java.lang.String |
toString() |
static <T,U,R> R |
willBlock(java.util.function.BiFunction<T,U,R> func,
T t,
U u) |
static <R> R |
willBlock(java.util.concurrent.Callable<R> func) |
static <T,R> R |
willBlock(java.util.function.Function<T,R> func,
T t) |
static <T,U,V,W,X,R> |
willBlock(Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y,R> |
willBlock(Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z,R> |
willBlock(Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W,R> |
willBlock(QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w) |
static <T,U,V,R> R |
willBlock(TriFunction<T,U,V,R> func,
T t,
U u,
V v) |
static <T,U> void |
willBlockv(java.util.function.BiConsumer<T,U> func,
T t,
U u) |
static <T> void |
willBlockv(java.util.function.Consumer<T> func,
T t) |
static <T,U,V,W,X> |
willBlockv(Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x) |
static <T,U,V,W,X,Y> |
willBlockv(Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y) |
static <T,U,V,W,X,Y,Z> |
willBlockv(Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z) |
static <T,U,V,W> void |
willBlockv(QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w) |
static void |
willBlockv(java.lang.Runnable func)
Informs the underlying ForkJoinPool that the current task is about to block.
|
static <T,U,V> void |
willBlockv(TriConsumer<T,U,V> func,
T t,
U u,
V v) |
public static final int MAX_SCHEDULE_PER_QID
Integer.MAX_VALUE, implying that off-EDT tasks for the same component
might run in parallel if the pool allows it, rather than strictly sequentially.public static final SPU S
public static final java.lang.String SYS_PROP_NAME_PARALLELISM
public static java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
java.lang.Runnable func)
qid - The serialization key (e.g., the Component). Pass null for independent execution.func - The void-returning logic to run.public static java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
java.lang.Runnable func)
qid - The serialization key.func - The logic to run on the UI thread.public static <T> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
These methods are overloads of offEDTv(Object, Runnable) that accept arguments directly,
creating a curried Runnable to avoid manual lambda capturing.
qid - The serialization key.func - The consumer to execute.t - The argument to pass to the consumer.public static <T> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
offEDTv(Object, Consumer, Object)public static <T,U> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
offEDTv(Object, Consumer, Object)public static <T,U> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
offEDTv(Object, Consumer, Object)public static <T,U,V> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v)
public static <T,U,V> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v)
public static <T,U,V,W> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W,X> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X,Y> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y,Z> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z,A> java.util.concurrent.CompletableFuture<java.lang.Void> offEDTv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A> java.util.concurrent.CompletableFuture<java.lang.Void> onEDTv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
qid - The serialization key.func - The logic that returns a result.public static <R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
qid - The serialization key.func - The logic that returns a result.public static <T,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
These methods are overloads of offEDT(Object, Callable) that accept arguments directly,
creating a curried Callable to avoid manual lambda capturing.
qid - The serialization key.func - The function to execute.t - The argument to pass to the function.public static <T,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
offEDT(Object, Function, Object)public static <T,U,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u)
offEDT(Object, Function, Object)public static <T,U,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u)
offEDT(Object, Function, Object)public static <T,U,V,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v)
public static <T,U,V,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v)
public static <T,U,V,W,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W,X,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X,Y,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y,Z,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z,A,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A,B,R> java.util.concurrent.CompletableFuture<R> offEDT(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b)
public static <T,U,V,W,X,Y,Z,A,B,R> java.util.concurrent.CompletableFuture<R> onEDT(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b)
public static java.util.concurrent.CompletableFuture<?> offEDT(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static java.util.concurrent.CompletableFuture<?> onEDT(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static java.util.concurrent.CompletableFuture<?> offEDT(java.lang.Object qid,
java.lang.Object o,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static java.util.concurrent.CompletableFuture<?> onEDT(java.lang.Object qid,
java.lang.Object o,
java.lang.String mname,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static final <T> java.util.concurrent.Future<T> fork(java.util.concurrent.Callable<T> c)
Note:
This provides NO guarantees about sequence of submission and execution regarding a qid.
It essentially acts as a wrapper around the internal ForkJoinPool.
public static final java.util.concurrent.Future<java.lang.Void> forkv(java.lang.Runnable r)
Note:
This provides NO guarantees about sequence of submission and execution regarding a qid.
public static <T> java.util.concurrent.CompletableFuture<java.lang.Void> delayOnEDT(int delay,
java.util.concurrent.TimeUnit unit,
java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
delay - Time to wait.unit - Time unit.qid - The queue ID.func - The logic to execute.public static java.util.concurrent.CompletableFuture<java.lang.Void> delayOnEDT(int delay,
java.util.concurrent.TimeUnit unit,
java.lang.Object qid,
java.lang.Runnable func)
public static boolean invokeAndWaitIfNotOnEDT(java.lang.Object qid,
java.lang.Runnable func)
Usage pattern:
void updateUI() {
if (SPU.invokeAndWaitIfNotOnEDT(this, this::updateUI)) {
return;
}
// ... actual UI logic here ...
}
true if the current thread was NOT the EDT and the task was dispatched/waited for.
false if already on EDT, meaning execution should proceed immediately in caller.public static <T,R> boolean invokeAndWaitIfNotOnEDT(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
public static void offEDTAndWaitv(java.lang.Object qid,
java.lang.Runnable func)
Safe to call from EDT; uses SecondaryLoop to keep UI responsive while waiting.
public static void onEDTAndWaitv(java.lang.Object qid,
java.lang.Runnable func)
Safe to call from EDT (uses SecondaryLoop) or background threads.
public static <T> void offEDTAndWaitv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
offEDTAndWaitv(Object, Runnable)public static <T> void onEDTAndWaitv(java.lang.Object qid,
java.util.function.Consumer<T> func,
T t)
onEDTAndWaitv(Object, Runnable)public static <T,U> void offEDTAndWaitv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
offEDTAndWaitv(Object, Runnable)public static <T,U> void onEDTAndWaitv(java.lang.Object qid,
java.util.function.BiConsumer<T,U> func,
T t,
U u)
onEDTAndWaitv(Object, Runnable)public static <T,U,V> void offEDTAndWaitv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v)
public static <T,U,V> void onEDTAndWaitv(java.lang.Object qid,
TriConsumer<T,U,V> func,
T t,
U u,
V v)
public static <T,U,V,W> void offEDTAndWaitv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W> void onEDTAndWaitv(java.lang.Object qid,
QuadConsumer<T,U,V,W> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W,X> void offEDTAndWaitv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X> void onEDTAndWaitv(java.lang.Object qid,
Consumer5<T,U,V,W,X> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X,Y> void offEDTAndWaitv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y> void onEDTAndWaitv(java.lang.Object qid,
Consumer6<T,U,V,W,X,Y> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y,Z> void offEDTAndWaitv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z> void onEDTAndWaitv(java.lang.Object qid,
Consumer7<T,U,V,W,X,Y,Z> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z,A> void offEDTAndWaitv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A> void onEDTAndWaitv(java.lang.Object qid,
Consumer8<T,U,V,W,X,Y,Z,A> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A,B,R> void offEDTAndWaitv(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b)
public static <T,U,V,W,X,Y,Z,A,B,R> void onEDTAndWaitv(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b)
public static <R> R offEDTAndWait(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
offEDTAndWaitv(Object, Runnable)public static <R> R onEDTAndWait(java.lang.Object qid,
java.util.concurrent.Callable<R> func)
onEDTAndWaitv(Object, Runnable)public static <T,R> R offEDTAndWait(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
offEDTAndWait(Object, Callable)public static <T,R> R onEDTAndWait(java.lang.Object qid,
java.util.function.Function<T,R> func,
T t)
onEDTAndWait(Object, Callable)public static <T,U,R> R offEDTAndWait(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u)
public static <T,U,R> R onEDTAndWait(java.lang.Object qid,
java.util.function.BiFunction<T,U,R> func,
T t,
U u)
public static <T,U,V,R> R offEDTAndWait(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v)
public static <T,U,V,R> R onEDTAndWait(java.lang.Object qid,
TriFunction<T,U,V,R> func,
T t,
U u,
V v)
public static <T,U,V,W,R> R offEDTAndWait(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W,R> R onEDTAndWait(java.lang.Object qid,
QuadFunction<T,U,V,W,R> func,
T t,
U u,
V v,
W w)
public static <T,U,V,W,X,R> R offEDTAndWait(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X,R> R onEDTAndWait(java.lang.Object qid,
Function5<T,U,V,W,X,R> func,
T t,
U u,
V v,
W w,
X x)
public static <T,U,V,W,X,Y,R> R offEDTAndWait(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y,R> R onEDTAndWait(java.lang.Object qid,
Function6<T,U,V,W,X,Y,R> func,
T t,
U u,
V v,
W w,
X x,
Y y)
public static <T,U,V,W,X,Y,Z,R> R offEDTAndWait(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z,R> R onEDTAndWait(java.lang.Object qid,
Function7<T,U,V,W,X,Y,Z,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z)
public static <T,U,V,W,X,Y,Z,A,R> R offEDTAndWait(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A,R> R onEDTAndWait(java.lang.Object qid,
Function8<T,U,V,W,X,Y,Z,A,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a)
public static <T,U,V,W,X,Y,Z,A,B,R> R offEDTAndWait(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b)
public static <T,U,V,W,X,Y,Z,A,B,R> R onEDTAndWait(java.lang.Object qid,
Function9<T,U,V,W,X,Y,Z,A,B,R> func,
T t,
U u,
V v,
W w,
X x,
Y y,
Z z,
A a,
B b)
public static java.lang.Object offEDTAndWait(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static java.lang.Object onEDTAndWait(java.lang.Object qid,
java.lang.Class<?> cl,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static java.lang.Object offEDTAndWait(java.lang.Object qid,
java.lang.Object o,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static java.lang.Object onEDTAndWait(java.lang.Object qid,
java.lang.Object o,
java.lang.String m,
java.lang.Object[] args,
java.lang.Class<?>[] argtypes)
public static void syncEDT(java.lang.Object qid)
public static void syncEDT()
public static boolean isEDT()
public static void needsEDT()
public static boolean isNestedEDT()
public static java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable func,
long millis)
public static java.util.concurrent.Future<?> submitSpareTimeJob(java.lang.Runnable func)
public java.lang.String toString()
toString in class java.lang.Objectpublic static java.lang.String qidToString(java.lang.Object qid)
public static void willBlockv(java.lang.Runnable func)
Use Case:
When performing IO or waiting on a lock inside an offEDT task.
public static <T> void willBlockv(java.util.function.Consumer<T> func,
T t)
public static <T,U> void willBlockv(java.util.function.BiConsumer<T,U> func,
T t,
U u)
public static <T,U,V> void willBlockv(TriConsumer<T,U,V> func, T t, U u, V v)
public static <T,U,V,W> void willBlockv(QuadConsumer<T,U,V,W> func, T t, U u, V v, W w)
public static <T,U,V,W,X> void willBlockv(Consumer5<T,U,V,W,X> func, T t, U u, V v, W w, X x)
public static <T,U,V,W,X,Y> void willBlockv(Consumer6<T,U,V,W,X,Y> func, T t, U u, V v, W w, X x, Y y)
public static <T,U,V,W,X,Y,Z> void willBlockv(Consumer7<T,U,V,W,X,Y,Z> func, T t, U u, V v, W w, X x, Y y, Z z)
public static <R> R willBlock(java.util.concurrent.Callable<R> func)
public static <T,R> R willBlock(java.util.function.Function<T,R> func,
T t)
public static <T,U,R> R willBlock(java.util.function.BiFunction<T,U,R> func,
T t,
U u)
public static <T,U,V,R> R willBlock(TriFunction<T,U,V,R> func, T t, U u, V v)
public static <T,U,V,W,R> R willBlock(QuadFunction<T,U,V,W,R> func, T t, U u, V v, W w)
public static <T,U,V,W,X,R> R willBlock(Function5<T,U,V,W,X,R> func, T t, U u, V v, W w, X x)
public static <T,U,V,W,X,Y,R> R willBlock(Function6<T,U,V,W,X,Y,R> func, T t, U u, V v, W w, X x, Y y)
public static <T,U,V,W,X,Y,Z,R> R willBlock(Function7<T,U,V,W,X,Y,Z,R> func, T t, U u, V v, W w, X x, Y y, Z z)
Copyright © 2000-2026 OAshi S.à r.l. All Rights Reserved.