// Path: XServer-API/src/main/java/de/mickare/xserver/ServerThreadPoolExecutor.java
// public interface ServerThreadPoolExecutor {
// 
//   /**
//    * Here we add our jobs to working queue
//    *
//    * @param task a Runnable task
//    */
//   public abstract Future<?> runTask(Runnable task);
//   
//   /**
//    * Shutdown the Threadpool if it's finished
//    */
//   public abstract void shutDown();
// 
//   /**
//    * Run tha main ServerSocket Task
//    * 
//    * @param task
//    * @return
//    */
//   Future<?> runServerTask(Runnable task);
// 
// }


import de.mickare.xserver.ServerThreadPoolExecutor;
package de.mickare.xserver.util;


public abstract class InterruptableRunnable implements Runnable {
  private volatile boolean interrupted = false;
  private final String name;

  public InterruptableRunnable(String name) {
    this.name = name;
  }

// Path: XServer-API/src/main/java/de/mickare/xserver/ServerThreadPoolExecutor.java
// public interface ServerThreadPoolExecutor {
// 
//   /**
//    * Here we add our jobs to working queue
//    *
//    * @param task a Runnable task
//    */
//   public abstract Future<?> runTask(Runnable task);
//   
//   /**
//    * Shutdown the Threadpool if it's finished
//    */
//   public abstract void shutDown();
// 
//   /**
//    * Run tha main ServerSocket Task
//    * 
//    * @param task
//    * @return
//    */
//   Future<?> runServerTask(Runnable task);
// 
// }


// Path: XServer-API/src/main/java/de/mickare/xserver/util/InterruptableRunnable.java
import de.mickare.xserver.ServerThreadPoolExecutor;

package de.mickare.xserver.util;


public abstract class InterruptableRunnable implements Runnable {
  private volatile boolean interrupted = false;
  private final String name;

  public InterruptableRunnable(String name) {
    this.name = name;
  }

  public void start(ServerThreadPoolExecutor threadpool) {