用Java实现 定义线程,该线程可以计算出100以内的素数。 要求用户输入线程数量,然后开启对应数量的线程,计算100以内的素数并输出哪些是素数哪些不是素数,最后输出每个线程总共耗时时间。
时间: 2023-08-29 13:06:05 浏览: 69
JAVA实现线程的方法
以下是一个示例代码,用于实现定义线程计算100以内素数的功能,并且实现了多线程计算和耗时统计:
```
import java.util.Scanner;
class PrimeCheckThread extends Thread {
private int start;
private int end;
private long totalTime;
public PrimeCheckThread(int start, int end) {
this.start = start;
this.end = end;
}
public void run() {
long startTime = System.currentTimeMillis();
for(int i = start; i <= end; i++) {
boolean isPrime = true;
for(int j = 2; j <= i/2; j++) {
if(i % j == 0) {
isPrime = false;
break;
}
}
if(isPrime) {
System.out.println(i + " is a prime number.");
} else {
System.out.println(i + " is not a prime number.");
}
}
long endTime = System.currentTimeMillis();
totalTime = endTime - startTime;
}
public long getTotalTime() {
return totalTime;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number of threads:");
int numThreads = sc.nextInt();
int range = 100;
int start = 1;
int end = range/numThreads;
PrimeCheckThread[] threads = new PrimeCheckThread[numThreads];
for(int i = 0; i < numThreads; i++) {
threads[i] = new PrimeCheckThread(start, end);
start = end + 1;
end = start + range/numThreads - 1;
}
for(int i = 0; i < numThreads; i++) {
threads[i].start();
}
long totalTime = 0;
for(int i = 0; i < numThreads; i++) {
try {
threads[i].join();
totalTime += threads[i].getTotalTime();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Total time taken: " + totalTime + "ms");
}
}
```
在这个示例中,我们首先要求用户输入线程数量,然后根据线程数量将100个数字范围分配给每个线程。然后,我们创建一个名为 PrimeCheckThread 的线程类来计算每个数字是否为素数,并在每个线程完成计算后输出结果。最后,我们使用 join() 方法等待所有线程完成,计算总共耗时时间并输出。
阅读全文