Witam.
Probuje napisac program, ktory wylicza sume liczb pierwszych ponizej 2 000 000. Jednak ze wzgledu, ze trwalo to bardzo dlugo to chcialem zrobic to w wielu watkach. Kazdy watek ma liczyc czesc sumy. Jednak jak po uruchomieniu programu uruchamia sie tylko jeden watek, a eclipse otwiera mi klase Thread z zaznaczona linjka "throw new IllegalThreadStateException();" nie bardzo wiem o co mu biega bo kompilator nie zglasza zadnych bledow, program niby dalej dziala, ale nic sie nie dzieje. Prosilbym o pomoc z tym zagadnieniem :) Ponizej zamieszczam kod poszczegolnych klas.
Jest to moj pierwszy program wielowatkowy wiec prosze o wyrozumialosc. :)
PrimeSum - klasa, ktora uruchamia watki i udostepnia metody z ktorych watek moze sobie pobrac zakres dzialania.
public class PrimeSum {
private int begin = 2;
double sum = 2d;
PrimeSum() {
PrimeSumThread thread = new PrimeSumThread(this);
for(int i = 0; i <= 100; i++) {
thread.start();
}
}
synchronized void sumThread(double prime) {
sum += prime;
System.out.println(sum);
}
synchronized int getBegin() {
int temp = begin;
if(begin == 2)
begin = 0;
begin += 20000;
return temp;
}
synchronized int getEnd() {
int temp = begin-1;
return temp;
}
}
PrimeSumThread - no, a to juz sama klasa watku. :)
public class PrimeSumThread extends Thread{
PrimeSum pr;
PrimeSumThread(PrimeSum pr) {
this.pr = pr;
}
public void run() {
System.out.println("Rozpoczecie watku: " + this.getName());
int begin = pr.getBegin();
int end = pr.getEnd();
System.out.println(begin + " " + end);
double sum = 0;
IsPrime p = new IsPrime();
for(int i = begin; i < end;i++){
if(p.isPrime(i))
sum += i;
}
pr.sumThread(sum);
System.out.println("Konczenie watku: " + this.getName());
}
}