private void launchThreads() {
		assert threadCount > 0;
		Thread[] threads = new Thread[this.threadCount];
		int delta = this.totalReps / this.threadCount;
		for (int i = 0; i < threadCount; i++) {
			final int startCount = i * delta;
			if (i + 1 == threadCount) {
				delta = totalReps - (threadCount - 1) * delta;// take care of
																// remaniders.
			}
			final int deltaFinal = delta;
			threads[i] = new Thread() {
				@Override
				public void run() {
					MSLike.this.run(startCount, deltaFinal);
				}
			};
			threads[i].start();
			try {
				Thread.sleep(10);// space em out a bit.
			} catch (InterruptedException e) {
				// doesn't affect symatics even if interuped.
			}
		}
		// join to all
		boolean isAnyAlive = true;
		while (isAnyAlive) {
			isAnyAlive = false;
			for (Thread t : threads) {
				if (t.isAlive()) {
					try {
						t.join();
					} catch (InterruptedException e) {
					}
					isAnyAlive |= t.isAlive();
				}
			}
		}
	}