    001package com.hammurapi.common.concurrent;
    002
    003import java.util.Collections;
    004import java.util.List;
    005import java.util.concurrent.AbstractExecutorService;
    006import java.util.concurrent.ExecutorService;
    007import java.util.concurrent.TimeUnit;
    008
    009/**
    010 * Executes all tasks in the current thread. This executor service can be used in situations when
    011 * inherently asynchronous class shall operate in synchronous mode.
    012 * @author Pavel Vlasov
    013 *
    014 */
    015public class CallerThreadExecutorService extends AbstractExecutorService {
    016
    017        private CallerThreadExecutorService() {
    018
    019        }
    020
    021        public final static ExecutorService INSTANCE = new CallerThreadExecutorService();
    022
    023        @Override
    024        public void shutdown() {
    025                // Nothing to do
    026        }
    027
    028        @Override
    029        public List<Runnable> shutdownNow() {
    030                return Collections.emptyList();
    031        }
    032
    033        @Override
    034        public boolean isShutdown() {
    035                return false;
    036        }
    037
    038        @Override
    039        public boolean isTerminated() {
    040                return false;
    041        }
    042
    043        @Override
    044        public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
    045                return true;
    046        }
    047
    048        @Override
    049        public void execute(Runnable command) {
    050                command.run();
    051        }
    052
    053}