多线程求素数
package test;成都创新互联公司是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,西云机房,海外高防服务器,机柜大带宽、租用·托管,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。
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;
}
}
当前名称:多线程求素数
转载来源:http://scyanting.com/article/jgiodo.html