Java多线程素数

Java多线程素数,java,arrays,multithreading,algorithm,class,Java,Arrays,Multithreading,Algorithm,Class,我在这个项目上工作了一段时间,我想我已经取得了很大的进步。我的java技能不是很好,但我认为我很接近。除了我的worker类中的“public void run”之外,所有的东西都应该编译而没有问题。程序会提示用户需要多少线程,然后通过随机数文本文件进行解析,找到所有素数。我的问题似乎是质数的算法。我如何编写算法,以便它解析数据并找到素数 我已经在下面发布了整个程序,但请看底部的工人阶级。在解决这个问题时,任何帮助都将不胜感激。多谢各位 import java.io.BufferedReader

我在这个项目上工作了一段时间,我想我已经取得了很大的进步。我的java技能不是很好,但我认为我很接近。除了我的worker类中的“public void run”之外,所有的东西都应该编译而没有问题。程序会提示用户需要多少线程,然后通过随机数文本文件进行解析,找到所有素数。我的问题似乎是质数的算法。我如何编写算法,以便它解析数据并找到素数

我已经在下面发布了整个程序,但请看底部的工人阶级。在解决这个问题时,任何帮助都将不胜感激。多谢各位

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