public class TestPrime {
public static void main(String[] args) throws Exception {
//创建线程池
ExecutorService pool = Executors.newFixedThreadPool(5);
//接收每个线程返回的结果
Future<Integer>[] a = new Future[5];
//开启5个线程放到线程池执行,没个线程计算2000000个数
for (int i = 0; i < 5; i++) {
a[i] = pool.submit(new C1(2000000*i, 2000000*(i+1)));
}
//统计每个线程的计算结果
int sum = 0;
for (Future<Integer> f : a) {
//如果线程执行完.直接获取到结果.如果没执行完.则等待执行完
sum += f.get();
}
System.out.println("质数: "+sum);
pool.shutdown(); //销毁线程池
}
static class C1 implements Callable<Integer> {
int from;
int to;
int count;
public C1(int from, int to) {
if (from<=2) {
from = 3;
count = 1;
}
this.from = from;
this.to = to;
}
@Override
public Integer call() throws Exception {
for (int i = from; i < to; i++) {
if (isPrime(i)) {
count++;
}
}
return count;
}
/**
* 判断是否为质数
* @param i
* @return
*/
private boolean isPrime(int i) {
double m = Math.sqrt(i)+1;
for (int j = 2; j < m; j++) {
if (i%j == 0) {
return false;
}
}
return true;
}
}
}
执行结果:
质数: 664579