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