content: package im.actor.runtime.generic.threading;
  
  import java.util.concurrent.Executor;
  import java.util.concurrent.Executors;
  
  import im.actor.runtime.Runtime;
  import im.actor.runtime.actors.ThreadPriority;
  import im.actor.runtime.threading.ImmediateDispatcher;
  
  public class GenericImmediateDispatcher implements ImmediateDispatcher {
  
      private final Executor EXECUTOR;
  
      public GenericImmediateDispatcher(String name, ThreadPriority priority) {
          EXECUTOR = Executors.newSingleThreadExecutor(r -> {
              Thread workingThread = new Thread(r);
              switch (priority) {
                  case HIGH:
                      workingThread.setPriority(Thread.MAX_PRIORITY);
                  case LOW:
                      workingThread.setPriority(Thread.MIN_PRIORITY);
                  default:
                  case NORMAL:
                      workingThread.setPriority(Thread.NORM_PRIORITY);
              }
              workingThread.setName(name);
              return workingThread;
          });
      }
  
      @Override
      public synchronized void dispatchNow(Runnable runnable) {
          EXECUTOR.execute(runnable);
      }
  }
  