Java多线程素数
我在这个项目上工作了一段时间,我想我已经取得了很大的进步。我的java技能不是很好,但我认为我很接近。除了我的worker类中的“public void run”之外,所有的东西都应该编译而没有问题。程序会提示用户需要多少线程,然后通过随机数文本文件进行解析,找到所有素数。我的问题似乎是质数的算法。我如何编写算法,以便它解析数据并找到素数 我已经在下面发布了整个程序,但请看底部的工人阶级。在解决这个问题时,任何帮助都将不胜感激。多谢各位Java多线程素数,java,arrays,multithreading,algorithm,class,Java,Arrays,Multithreading,Algorithm,Class,我在这个项目上工作了一段时间,我想我已经取得了很大的进步。我的java技能不是很好,但我认为我很接近。除了我的worker类中的“public void run”之外,所有的东西都应该编译而没有问题。程序会提示用户需要多少线程,然后通过随机数文本文件进行解析,找到所有素数。我的问题似乎是质数的算法。我如何编写算法,以便它解析数据并找到素数 我已经在下面发布了整个程序,但请看底部的工人阶级。在解决这个问题时,任何帮助都将不胜感激。多谢各位 import java.io.BufferedReader
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class PrimeNumbers{
public static void main(String[] args) throws IOException {
int[] numbers = new int[100000];
int count;
int index = 0;
String datafile = "dataset529.txt"; //string which contains datafile
String line; //current line of text file
try (BufferedReader br = new BufferedReader(new FileReader(datafile))) { //reads in the datafile
while ((line = br.readLine()) != null) { //reads through each line
numbers[index++] = Integer.parseInt(line); //pulls out the number of each line and puts it in numberset[]
}
}
System.out.println("How many threads would you like to use?");
Scanner scan = new Scanner(System.in);
int z = scan.nextInt();
Thread[] threads = new Thread[z]; //creates threads as per user
worker[] finder = new worker[z]; //assigns finder to each thread created
int range = numbers.length / z; //breaks up each worker into a section depending on thread count.
for (count = 0; count < z; count++) {
int startAt = count * range;
int endAt = startAt + range;
finder[count] = new worker(startAt, endAt, numbers);
}
for (count = 0; count < z; count++) { //moves to next thread
threads[count] = new Thread(finder[count]);
threads[count].start();
}
boolean processing = false;
do {
processing = false;
for (Thread t : threads) {
if (t.isAlive()) {
processing = true;
break;
}
}
} while (processing);
for (worker worker : finder) {
System.out.println("Max of thread is: " + worker.getPrime());
}
}
public static class worker implements Runnable {
private int start;
private int stop;
private int numberset[];
public worker(int start, int stop, int[] numberset) {
this.start = start;
this.stop = stop;
this.numberset = numberset;
}
@Override
public void run() {
for (int x = start; x < stop; x++) {
if (numberset[]%3 && != 1 && != 2 && !=3)
return prime
}
}
public int getPrime() {
return true
}
}
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Scanner;
公共类素数{
公共静态void main(字符串[]args)引发IOException{
整数[]个数=新整数[100000];
整数计数;
int指数=0;
String datafile=“dataset529.txt”;//包含数据文件的字符串
字符串行;//文本文件的当前行
try(BufferedReader br=new BufferedReader(new FileReader(datafile)){//读取数据文件
而((line=br.readLine())!=null){//读取每一行
numbers[index++]=Integer.parseInt(line);//提取每行的编号并将其放入numberset[]
}
}
System.out.println(“您希望使用多少线程?”);
扫描仪扫描=新扫描仪(System.in);
int z=scan.nextInt();
线程[]线程=新线程[z];//根据用户创建线程
worker[]finder=new worker[z];//为创建的每个线程分配finder
int range=numbers.length/z;//根据线程数将每个辅助线程分解为一个部分。
对于(计数=0;计数
如果(numberset[]%3&&!=1&&!=2&&!=3)的意思是什么?我认为您可以删除整个源代码并专注于此。Ps:线程不返回值。请参见Callable
而不是Runnable
。这是我要查找素数的地方。我有点迷路了,lol。我最初使用这个程序是为了使用线程来查找最大值,而且效果很好。Iyou应该从什么方法/算法开始寻找素数,然后开始编码。。。(不是所有的都适合多线程)例如,我的答案是C++(代码是非并行的),并且有很多性能提示来提供问题本身是java