@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)); }