Dzień dobry;
Piszę projekt do obliczania całki metodą trapezów na wątkach. Tworzę w pętli n wątków i w innej pętli m obiektów które chcę rozdzielić między wątki. Jak takie coś zaimplementować ? Chodzi mi o sam algorytm. żeby po skończeniu jednego zadania wątek brał nowy obiekt( nie obliczony ) i obliczał
0
0
To mi wygląda na problem producenta i konsumenta. Przykładów w sieci na pęczki.
0
- PULA wątków a nie basen...
- Nie, to nie są producenci i konsumenci. Problem jest dużo łatwiejszy. To jest zwykły przykład na wykorzystanie synchronizowanej kolejki. Tworzysz sobie kolejkę z zadaniami to wykonania a następnie tworzysz wątki które wyciągają z tej kolejki kolejne zadania do wykonania. Nie widzę tu żadnego problemu.
0
Napisałem taki kod:
Da się w ten sposób przypisać zadania ?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication2;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
*
* @author Ferno
*/
public class JavaApplication2 {
/**
* @param args the command line arguments
*/
static int pole;
public static void podzielNaWatki(double xp, double xk,int n,int liczbawatkow)
{
Oblicz oblicz[]=new Oblicz[n];
Lock obl[] = new Lock[liczbawatkow];
Thread[] watek = new Thread[liczbawatkow];
double dlprzedzialu = (xk-xp)/n;
int j,i;
for(i=0;i<n;i++)
{
oblicz[i]=new Oblicz(xp,xp+dlprzedzialu);
System.out.println(xp+" "+(xp+dlprzedzialu));
xp=xp+dlprzedzialu;
}
for(i=0;i<n;i+=liczbawatkow)
{
for(j=0;j<liczbawatkow;j++)
{
watek[j] = new Thread(oblicz[i+j]);
watek[j].start();
pole+=oblicz[i+j].getPole();
}
}
}
public static void main(String[] args)
{
// TODO code application logic here
double xp = -5;
double xk = 5;
int n = 10;
int ileWatkow = 3;
podzielNaWatki(xp, xk, n, ileWatkow);
System.out.println("koniec watkow:\t");
}
}