package xapi.process;
import java.util.concurrent.Future;
import javax.inject.Provider;
import xapi.inject.X_Inject;
import xapi.process.api.AsyncLock;
import xapi.process.api.Process;
import xapi.process.api.ProcessController;
import xapi.process.service.ConcurrencyService;
import xapi.util.api.ReceivesValue;
public class X_Process {
private static final Provider<ConcurrencyService> service = X_Inject
.singletonLazy(ConcurrencyService.class);
public static <T> void block(Future<T> future, ReceivesValue<T> receiver) {
service.get().resolve(future, receiver);
}
public static void runDeferred(Runnable cmd) {
service.get().runDeferred(cmd);
}
public static void runEventually(Runnable cmd) {
service.get().runEventually(cmd);
}
public static void runFinally(Runnable cmd) {
service.get().runFinally(cmd);
}
public static void runTimeout(Runnable cmd, int milliDelay) {
service.get().runTimeout(cmd, milliDelay);
}
public static Thread newThread(Runnable cmd) {
return service.get().newThread(cmd);
}
public static <T> ProcessController<T> newProcess(Process<T> process) {
return service.get().newProcess(process);
}
public static boolean flush(int timeout) {
return flush(Thread.currentThread(), timeout);
}
public static boolean flush(Thread thread, int timeout) {
return service.get().flush(thread, timeout);
}
public static boolean trySleep(int millis) {
return service.get().trySleep(millis);
}
public static void kill(Thread thread, int timeout) {
service.get().kill(thread, timeout);
}
public static double threadStartTime() {
return service.get().threadStartTime(Thread.currentThread());
}
public static double now() {
return service.get().now();
}
public static AsyncLock newLock() {
return service.get().newLock();
}
}