代码

public class Main {

public static void main(String[] args) throws InterruptedException {

int n = 100000000;

long startTime = System.currentTimeMillis();
List<Integer> list = Collections.synchronizedList(new ArrayList<>());

List<Thread> threads = new ArrayList<>();

int process = Runtime.getRuntime().availableProcessors();

for (int i = 1; i <= process; i++) {
Thread thread;
if (i == process) {
thread = new Thread(new MyThread(list, n / process * (i - 1) + 1, n));
} else {
thread = new Thread(new MyThread(list, n / process * (i - 1) + 1, n / process * i));
}
thread.start();
threads.add(thread);
}

for (Thread thread : threads) {
thread.join();
}
long endTime = System.currentTimeMillis();
System.out.println((endTime - startTime) / 1000 + "s");

FileWriter fw = null;
try {
System.out.println("1亿以内有:" + list.size() + "个素数");
//创建字符输出流对象,负责向文件内写入
fw = new FileWriter("F:\\text.txt");
//将str里面的内容读取到fw所指定的文件中
fw.write(list.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}
}

class MyThread implements Runnable {

private final List<Integer> list;
private final int start;
private final int end;

public MyThread(List<Integer> list, int start, int end) {
this.list = list;
this.start = start;
this.end = end;
}

@Override
public void run() {
for (int i = start; i <= end; i++) {
if (i < 2) {
continue;
}
int sqrt = (int) Math.sqrt(i);
int d;
for (d = 2; d <= sqrt; ++d) {
if (i % d == 0) {
break;
}
}
if (d > sqrt) {
list.add(i);
}
}
}
}

运行结果

19s
1亿以内有:5761455个素数