计算1-x内的素数, 结果保存在mysql中
要求:
1. 使用y个线程计算
2. 尽量优化算法
3. x和y可配置
我是用的mvc写的
下面是线程池和素数计算方式
写到这里写不下去了,求帮助
package com.lsszss;
import com.lsszss.service.Impl.PrimeImpl;
import com.lsszss.service.PrimeService;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
- @ClassName Threads
- @Author 25788
- @Date 2019/12/20 11:52
- @Version V1.0
- java.util.concurrent.Executors :线程池的工厂类,用来生成线程池
- 01.使用线程池的工厂类Executros里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池
- 02.创建一个类,实现Runnable接口,重写run方法,设置线程任务
- 03.调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行run方法
-
04.调用ExecutorService中的方法shutdown销毁线程池(不建议使用)
*/
public class prime {static PrimeService primeService= new PrimeImpl();
private static List getPrimeNumber(int num){
List arrayList = new ArrayList<>();
for (int i = 1;i < num+1 ; i++){
if (isPrime(i)){
arrayList.add(i);
primeService.addPrime(Long.parseLong(i+""));
}
}
return arrayList;
}public static boolean isPrime(int n){
if (n==2||n==3){
return true;
}
if (n%2==0){ // 是偶数就一定不是素数
return false;
}for (int i=3;i<=(int)Math.sqrt(n);i=i+2){ // 奇数+1为偶数,所以每次循环+2 if (n%i==0) {return false;} } return true;
}
public static void main(String[] args) {
int x=100; //1 - x 之间的素数
int y=2; //线程数System.out.println(getPrimeNumber(x)); // 01.使用线程池的工厂类Executros里边提供的静态方法newFixedThreadPool生产一个指定线程数量的线程池 ExecutorService executor = Executors.newFixedThreadPool(y); // 03.调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行run方法 executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); executor.submit(new PrimeThread()); executor.submit(new PrimeThread());
}
}