@Override
 public void run() {
   while (lower <= higher) {
     if (MathUtilForPrimes.isPrime(lower++)) {
       primeNumMap.put(lower - 1, new Object());
     }
   }
 }
 /**
  * @param lowerBound
  * @param uppderBound
  * @return Iterator : lazy iterator
  */
 @Override
 public Iterator<Integer> findPrimeNumber(int lowerBound, int uppderBound)
     throws IllegalArgumentException {
   if (lowerBound > uppderBound)
     throw new IllegalArgumentException(
         "Illegal range [" + lowerBound + ", " + uppderBound + "]to find prime numbers");
   int firstPrime = MathUtilForPrimes.firstPrimeNumber(lowerBound, uppderBound);
   Thread finder1 = new Thread(new Finder(primeNumMap, lowerBound, firstPrime));
   Thread finder2 = new Thread(new Finder(primeNumMap, firstPrime, uppderBound));
   finder1.start();
   finder2.start();
   return new CustomIterator(primeNumMap, ImmutableList.of(finder1, finder2));
 }