Zapisac wielowątkowy program w języku Java ,składający się z dwóch wątków , które działają na wspólnej tablicy a . Każdy z wątków niezależnie (równolegle) sumuje elementy w swojej połówce tablicy, a dopiero potem w sposób sekwencyjny dokonywane jest wyliczenie sumy wszystkich elementów tablicy na podstawie wyliczonych wcześniej sum elementów dla połówek tablicy. Początkowa wartośc elementów tablicy a ustawiana jest w programie głównym , który odpowiedzialny jest także wyświetlenie wynikowej wartości sumy wszystkich elementów tablicy. Struktura programu powinna mieć nastepujacą postac
public class watki_static {
static double a[];
static double sum;
// klasa definiująca oba wątki lub w ostatecznosci 2 klasy definiujące 2 wątki
……….
Public static void main (String [] args) {
//program główny konczy sie wyswietleniem sumy elementów talbicy a
}
}
Moje rozwiązanie nie dokonca prawidłowe
public class watek_static {
static double tab [];
static class suma =0;
static class suma_watek extends Thread {
private int numer;
private int rozmiar;
private double suma_l=0;
suma_watek(int numer, int rozmiar)
{
this.numer=numer;
this.rozmiar=rozmiar;
}
public void run () {
for (int i=0; i<rozmiar; ++i)
suma_l= suma_l + tab[numer+rozmiar*i];
synchronized (this){suma= suma + suma_l;} /// konkretnie chodzi o tą linijke związaną synchronizacją
}
}
public static void main ( String [] args)
{
tab = new double [200];
for(int i=0; i<200; ++i)
suma_watek tm1 = new suma_watek (0,100);
suma_watek tm2 = New suma_watek (1,100);
tm1.start();
tm2.start();
try {
System.out.println (“ czekaj na zakończenie”);
tm1.join();
tm2.join();
} catch (InterruptedException e) {}
System.out.println(“suma wynosi “ +suma);
}
}