public ProperProcessor(int threadCount, final ThreadFactory factory) {
		final ImmutableList.Builder<Thread> threads = ImmutableList.builder();
		while (threadCount-- >= 1) {
			final Thread thread = factory.newThread(
				new Runnable()
					{
						@Override
						public void run() {
							final BlockingQueue<Task<?>> queue = ProperProcessor.this.queue;
							try {
								while (!shutdown) {
									queue.take().handle();
								}
							} catch (final InterruptedException ex) {
								if (!shutdown)
									throw new IllegalStateException("Interrupted innappropriately", ex);
							}
						}
					}
				);
			threads.add(thread);
		}

		final Iterator<Thread> it = (this.threads = threads.build()).iterator();
		final Thread initial = it.next();
		if (it.hasNext()) {
			submit(new Callable<Object>()
				{
					@Override
					public Object call() throws Exception {
						while (it.hasNext()) {
							it.next().start();
						}
						return null;
					}
				});
		}
		initial.start();
	}