package app;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.*;
/**
* @Author lyr
* @create 2019/9/30 0:28
*/
public class Main {
static ArrayList<Integer> arr = new ArrayList<>(3000000);
static Random r = new Random();
static final int MAX_SIZE = 10000000;
static {
for(int i=0;i<arr.size();++i)
{
arr.add(100000+r.nextInt(100000));
}
}
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
long s = System.currentTimeMillis();
arr.forEach(Main::isPrime);
System.out.println(System.currentTimeMillis()-s);
s = System.currentTimeMillis();
arr.parallelStream().forEach(Main::isPrime);
System.out.println(System.currentTimeMillis()-s);
}
public static boolean isPrime(int n)
{
int tmp = (int)Math.sqrt(n)+1;
for(int i=2;i<tmp;++i)
{
if(n%i==0)
{
return false;
}
}
return true;
}
static List<Integer> getPrime(int l, int r)
{
List<Integer> results = new ArrayList<>(r-l+1);
for(int i=l;i<=r;++i)
{
if(isPrime(i))
{
results.add(i);
}
}
return results;
}
}
数组里面有300万个数,要计算是否是质数
上面是打印时间
并发使用的是多线程,并行是使用了多核cpu 来进行处理
因此并行比 java 抢占式的多线程效率更高
并行计算式多个线程运行在多个CPU上,多线程是多个线程运行在一个CPU上, 并行计算基本是依赖多线程的