多线程求素数
作者:互联网
<pre name="code" class="java">package test;
import java.util.concurrent.*;
public class test {
/*
* sum : the total of prime number.
* n : the range.
* nPart,eachPart : divide n into nPart,eachPart is n/nPart.
*/
public static void main(String[] args) {
int i, sum = 0, n = 10000000, nPart = 16, eachPart = n / nPart, LRange = 1, RRange = eachPart;
long begin, end;
Future[] future = new Future[nPart];
ExecutorService threadPool = Executors.newCachedThreadPool();
begin = System.nanoTime();
for (i = 0; i < nPart; i++)
future[i] = threadPool.submit(new MyThread(LRange + i * eachPart,
RRange + i * eachPart));
threadPool.shutdown();
while (!threadPool.isTerminated())
;
try {
for (i = 0; i < 16; i++)
sum += (Integer) future[i].get();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
end = System.nanoTime();
System.out.println((double) (end - begin) / 1000000000);
System.out.println(sum);
}
}
class MyThread implements Callable {
int sum = 0, LRange, RRange;// LRange: range left ; RRange : range right.
public MyThread(int lRange, int rRange) {
LRange = lRange;
RRange = rRange;
}
public Integer call() throws Exception {
int i, j;
for (i = LRange; i <= RRange; i += 2) {
for (j = 2; j * j <= i; j++)
if (i % j == 0)
break;
if (j * j > i)
sum++;
}
return sum;
}
}
标签:eachPart,sum,nPart,int,素数,LRange,RRange,多线程 来源: https://blog.51cto.com/14028890/2409019