Java,多线程求素数 使用10个线程求解10000以内的素数,每个线程负责1000范围:线程1负责找1~1000以内的素数,线程2负责找1001~2000以内的素数,……,线程10负责找9001~10000以内的素数。每个线程找到一个素数就马上将其打印出来。
时间: 2023-12-26 15:45:04 浏览: 156
Java多线程-对比创建多线程的两种方式
下面是Java多线程求素数的代码实现:
```java
public class PrimeNumberThread extends Thread {
private final int start;
private final int end;
public PrimeNumberThread(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public void run() {
for (int i = start; i <= end; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}
}
private boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
public class Main {
public static void main(String[] args) {
int start = 1;
int end = 10000;
int range = 1000;
for (int i = 0; i < end / range; i++) {
int threadStart = start + i * range;
int threadEnd = threadStart + range - 1;
if (threadEnd > end) {
threadEnd = end;
}
PrimeNumberThread thread = new PrimeNumberThread(threadStart, threadEnd);
thread.start();
}
}
}
```
在主函数中,我们根据范围和总数计算出每个线程的起始和结束位置,并创建一个PrimeNumberThread对象来执行任务。PrimeNumberThread继承自Thread类,重写了run()方法,在run()方法中对指定范围内的每个数进行素数判断,并将素数打印出来。
注意,线程的数量可以根据需要调整,但是需要保证每个线程负责的范围不重叠,否则会出现重复计算的问题。
阅读全文