@Override
	public void run() {
		ExecutorService exec = Executors.newCachedThreadPool();
		Future<?> future;
		Message msg;
		// Dieser Thread l�uft f�r immer
		while (true) {
			// Queue abarbeiten, solange es was zu tun gibt
			while (!messageQueue.isEmpty()) {
				msg = messageQueue.poll();
				// alle clients hart bedienen
				future = exec.submit(msg);
				try {
					future.get(StainedSockServer.MESSAGE_TIMEOUT, TimeUnit.MILLISECONDS);
				} catch (InterruptedException e) {
					main.getLog().severe("Thread interrupted: " + this.getName());
				} catch (ExecutionException e) {
					main.getLog().severe("Could not retrieve result: " + e.getCause());
				} catch (TimeoutException e) {
					main.getLog().warning("Message-Timeout");
				} finally {
					if (!future.isDone() && !future.isCancelled()) {
						future.cancel(true);
					}
				}
			}
			// CPU entlasten
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				main.getLog().severe("Thread interrupted: " + this.getName());
			}
		}
	}