Witam.
Od niedawna próbuję nauczyć się wpółbieżności w Javie i postawiono mi takie zadanie (treść podana niżej)... Niestety nie bardzo wiem jak się za to zadanie zabrać... Czy mógłby mi podpowiedzieć ewentualnie napisać jakiś szkic klasy?
Kod, działający w wątku A czyta z pliku ../Towary.txt informacje o towarach w postaci:
id_towaru waga
tworzy obiekty klasy Towar, zawierające przeczytane informacje oraz wyprowadza na konsolę informacje o liczbie utworzonych obiektów. Informacja ma być wyprowadzana co 200 obiektów w postaci:
utworzono 200 obiektów
utworzono 400 obiektów
utworzono 600 obiektów
itd.
Kod działający równolegle w innym wątku (B) sięga po te obiekty, sumuje wagę towarów i wyprowadza na konsolę informację o przeprowadzonym sumowaniu co 100 obiektów np.:
policzono wage 100 towarów
policzono wage 200 towarów
policzono wage 300 towarów
itd.
Na końcu podaje sumaryczną wagę wszystkich towarów.
Uwagi:
Plik powinien zawierać co najmniej 10 tys. opisów towarów (należy sobie go wygenerować programistycznie, ale na boku, nie w tym programie), nazwa pliku (wraz ze ścieżką) jest obowiązkowa , proszę nie dołączać tego pliku do projektu..
Zapewnić synchronizację i koordynację pracy obu wątków.
Forma wydruku na konsoli jest obowiązakowa
Wszystkie klasy w programie winny być publiczne (w różnych plikach)
Wykonanie programu winno zaczynać się w metodzide main() obowiązakowej klasy Main.
Plik winien znajdować się w nadkatalogu projektu (czyli w katalogu workspace'u)
Z góry dzięki.
Update: Popróbowałem coś zrobić samemu.. wydaje mi sie ze nie trzyma to wszystko sie kupy ale wstawie ... moze to bedzie jakis punkt wyjscia:
import java.io.FileNotFoundException;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
private static boolean values=false;
private static Map<Integer,Double>valuesMap=new LinkedHashMap<>();
public static void main(String[] args) {
Thread watekA=new Thread("Watek A") {
@Override
public void run() {
try {
while(values) {
wait();
}
}catch(InterruptedException ex) {
ex.printStackTrace();
}
while(/*sa nastepne wiersze z danymi*/) {
//1. wloz do mapy
//2. ustaw values=true
//3.notifyAll()
}
}
};
Thread watekB=new Thread("Watek B") {
@Override
public void run() {
try {
while(!values) {
wait();
}
}catch(InterruptedException ex) {
ex.printStackTrace();
}
while(valuesMap.isEmpty()==false) {
// 1. wykonaj obliczenia i usuwaj pojedyncze elmenty z mapy
}
//tutaj mapa jest juz pusta
values=false;
notifyAll();
}
};
}
}