Witam, otóż mam problem z wykonaniem funkcji Max równolegle. Dzieje się coś niewłaściwego - funkcja max wykonuje się tylko raz (w jednym wątku) zamiast tyle razy ile jest wątków. Błąd do wykrycia podczas wykonania programu. Zamieszczam kod poniżej:
package watki;
import static java.lang.Integer.parseInt;
import java.util.Random;
import java.util.Scanner;
public class Watki implements Runnable{
Thread hebra;
int inicio = 0, fin = 0;
int tabla[];
int result = 0;
public int get_result()
{
return result;
}
public int max(int b[], int x, int y)
{
int a = 0;
a = b[x];
for(int i = x; i < y; i++)
{
if(a < b[i])
{
a = b[i];
}
}
return a;
}
Watki(int tab[], int begin, int end)
{
inicio = begin;
fin = end;
tabla = new int [fin - inicio];
for(int i = 0; i < fin - inicio; i++)
{
tabla[i] = tab[i+inicio];
}
hebra = new Thread(this);
hebra.start();
}
@Override
public void run()
{
// Para testear funcion
try
{
System.out.println(Thread.currentThread());
result = max(tabla, inicio, fin);
}
catch(Exception e)
{
}
}
public static void main(String[] args) throws InterruptedException {
System.out.println("Podaj liczbe elementow ");
Scanner odczyt = new Scanner(System.in);
System.out.println("Podaj liczbe watkow ");
Scanner odczyt2 = new Scanner(System.in);
int N ,M;
N = parseInt(odczyt.nextLine());
M = parseInt(odczyt2.nextLine());
int tabela[] = new int [N];
int x = 0, y = 0, y1 = 0 , y2 = 0;
Random generator = new Random();
Watki[] wa = new Watki[M];
for(int i = 0; i < N; i++)
{
tabela[i] = generator.nextInt(100);
}
x = N/M;
for(int i = 0; i < M; i++)
{
wa[i] = new Watki(tabela,i*x,((i+1)*x) - 1);
}
for(int i = 0; i < M; i++)
{
System.out.println("Rezultat " + wa[i].get_result());
}
}
}