package org.torrent.internal.service;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
public class BasicEventDispatcherService implements EventDispatcherService {
private volatile Thread thread;
private ExecutorService service = Executors
.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return thread = new Thread(r);
}
});
@Override
public <T> T invokeAndWait(Callable<T> callable) throws Exception {
Future<T> fut = service.submit(callable);
return fut.get();
}
@Override
public void invokeLater(Runnable run) {
service.execute(run);
}
@Override
public boolean isEventDispatchThread() {
return Thread.currentThread() == thread;
}
}