如何利用并发的线程池提高我们的计算素数的效率
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class Duo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
long millis = System.currentTimeMillis();
ExecutorService service = Executors.newFixedThreadPool(10);
Task task1 = new Task(0, 10000);
Task task2 = new Task(10000, 20000);
Task task3 = new Task(20000, 30000);
Task task4 = new Task(30000, 40000);
Task task5 = new Task(40000, 50000);
Future<List<Integer>> submit = service.submit(task1);
Future<List<Integer>> submit1 = service.submit(task2);
Future<List<Integer>> submit2 = service.submit(task3);
Future<List<Integer>> submit3 = service.submit(task4);
Future<List<Integer>> submit4 = service.submit(task5);
List<Integer> integers1 = submit.get();
List<Integer> integers2 = submit1.get();
List<Integer> integers3 = submit2.get();
List<Integer> integers4 = submit3.get();
List<Integer> integers5 = submit4.get();
System.out.println(integers1);
System.out.println(integers2);
System.out.println(integers3);
System.out.println(integers4);
System.out.println(integers5);
System.out.println((System.currentTimeMillis() - millis)/100+"秒");
service.shutdownNow();
}
}
class Task implements Callable<List<Integer>> {
private int end;
private int start;
public Task(int start,int end){
this.start=start;
this.end=end;
}
@Override
public List<Integer> call()throws Exception {
List<Integer> list = new ArrayList<>();
for (;start<end ; start++) {
if (whether(start)) {
list.add(start);
}
}
return list;
}
private boolean whether(int number){
for (int i = 2; i <number ; i++) {
if(number%i==0) return false;
}
return true;
}
}