Java 尝试多线程筛选Eratosthenes,每个线程需要筛选一系列数字

Java 尝试多线程筛选Eratosthenes,每个线程需要筛选一系列数字,java,multithreading,sieve-of-eratosthenes,Java,Multithreading,Sieve Of Eratosthenes,不幸的是,我对如何从多线程开始非常迷茫。我假设线程代码看起来非常相似。也许是这样的 public class PrimeThread extends Thread { private int start, stop; ArrayList<Integer> list; public PrimeThread(int start, int stop, ArrayList<Integer> list) { this.start = st

不幸的是,我对如何从多线程开始非常迷茫。我假设线程代码看起来非常相似。也许是这样的

public class PrimeThread extends Thread {

    private int start, stop;
    ArrayList<Integer> list;

    public PrimeThread(int start, int stop, ArrayList<Integer> list) {
        this.start = start;
        this.stop = stop;
        this.list = list;
    }

    public void run() {
        boolean done = false;
        int currPrime = 0, pos = 2, initVal = 0;

        outerloop:
        for (int i = start; i < stop; i++) { //for every number in the list
            while (list.get(pos) == 0) {
                if (pos == list.size() - 1) {
                    break outerloop;
                }
                pos++;
            }

            currPrime = list.get(pos++); //set the current prime
            initVal = currPrime; //save the initial val of the prime
            done = false;

            while (!done) {
                try {
                    //increment the currPrime by its initial value
                    currPrime += initVal; 
                    //set the number at the new currPrime position to 0
                    list.set(currPrime, 0); 
                } catch (IndexOutOfBoundsException e) { 
                    //if currPrime position > list size, break out of while loop 
                    done = true;
                }
            }
        }
    }
}
公共类PrimeThread扩展线程{
私人int启动、停止;
数组列表;
公共PrimeThread(int-start、int-stop、ArrayList列表){
this.start=start;
this.stop=停止;
this.list=列表;
}
公开募捐{
布尔完成=假;
int currPrime=0,pos=2,initVal=0;
外部环路:
对于(int i=start;ilist size,则中断while循环
完成=正确;
}
}
}
}
}

有人能帮我解释一下如何开始吗?

嘿,我用多线程系统生成素数的图片,做了一些与此基本相同的事情。如果你感兴趣,你可以直接给我留言,我会和你分享。你可以研究我的来调整你的。事实上我刚刚让它工作起来。但是当我使用数以百万计的数字时,有一些逻辑错误。不知道为什么。不过我很感激你的提议。稍后我可能会给你留言:)是的,在性能方面,我花了很多精力关注细节,并尽可能地微调一切,同时尽可能地保持简单。我不想剥夺你的挑战,所以你可以自己做一切:)如果你感兴趣,我会把它放在我的网站上,在你空闲时抓取。哦,我刚刚意识到,我发布的一篇文章实际上并没有使用埃拉托斯坦筛,但它确实使用了一个多线程系统来计算素数。