java多线程求素数 使用10个线程求解10000以内的素数,每个线程负责1000范围:线程1负责找1~1000以内的素数,线程2负责找1001~2000以内的素数,……,线程10负责找9001~10000以内的素数。每个线程找到一个素数就马上
时间: 2023-12-26 13:06:58 浏览: 65
输出,并统计每个线程找到素数的总数。请问如何实现?
可以使用线程池来实现,创建一个FixedThreadPool,线程数为10。然后将任务分配给线程池中的线程处理,每个线程负责查找1000范围内的素数,并统计素数总数。每当一个线程找到一个素数时,就输出该素数,并将素数总数加1。最后汇总每个线程的素数总数即可。注意,需要对线程之间的素数总数进行同步。
相关问题
Java,多线程求素数 使用10个线程求解10000以内的素数,每个线程负责1000范围:线程1负责找1~1000以内的素数,线程2负责找1001~2000以内的素数,……,线程10负责找9001~10000以内的素数。每个线程找到一个素数就马上将其打印出来。
下面是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()方法中对指定范围内的每个数进行素数判断,并将素数打印出来。
注意,线程的数量可以根据需要调整,但是需要保证每个线程负责的范围不重叠,否则会出现重复计算的问题。
多线程求素数 使用10个线程求解10000以内的素数,每个线程负责1000范围:线程1负责找1~1000以内的素数,线程2负责找1001~2000以内的素数,……,线程10负责找9001~10000以内的素数。每个线程找到一个素数就马上将其打印出来。
以下是Python实现的代码:
import threading
# 判断一个数是否为素数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
# 每个线程的任务
def find_prime(start, end):
for i in range(start, end+1):
if is_prime(i):
print(i)
# 创建10个线程
threads = []
for i in range(1, 11):
start = (i-1) * 1000 + 1
end = i * 1000
t = threading.Thread(target=find_prime, args=(start, end))
threads.append(t)
# 启动10个线程
for t in threads:
t.start()
# 等待所有线程结束
for t in threads:
t.join()
# 输出结果
print("所有素数已找到!")
阅读全文