Synchronizowanie dlugosci listy

0

Witam!
Czy jest ktos w stanie wytlumaczyc mi jak zsynchrnonizowac dlugosc listy na owym przykladzie?? Zadaniem tego programiku jest przekazywaniem tokenow z pliku txt,
(wlasna metoda giveToken()) do 1 watku aby utworzyl ArrayListe z towarami(id, waga) i w tym samym czasie chcialbym aby watek 2 pobieral mi dane z powstajacej listy i zliczal jego calkowita wage.

import java.io.File; 
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main{
	static ArrayList<Towar> towary = new ArrayList<>();
	static int sumaWaga = 0;
	static boolean isDone = false;
	
	public static void main(String[] args) throws InterruptedException{
		Thread[] watki = getThread();
		watki[0].start();
		watki[1].start();
	
	}
	
	public static Thread[] getThread(){
		Thread[] watki = new Thread[2];
		watki[0] = new Thread(new Thread(){
			public void run(){
				StringTokenizer tokeny = giveToken();
				while(tokeny.hasMoreTokens()){
					int id = Integer.parseInt(tokeny.nextToken());
					int waga = Integer.parseInt(tokeny.nextToken());
					towary.add(new Towar(id, waga));
					if(towary.size()%200==0){
						System.out.println("utworzono "+towary.size()+" objektow");
					}
				}
				isDone=true;
			}
		});
		watki[1] = new Thread(new Thread(){
			public  void run(){
					for(int i=0; i<towary.size() || isDone==false ; i++){
						{
						sumaWaga += towary.get(i).getWaga();
						if(i%200==0)
							System.out.println("Policzono wage "+i+" towarów");
						}
					}
					System.out.println(sumaWaga);
				}
			});
			return watki;
		
	}
	
}
0

jesli chcesz rozwiazac rzeczywisty problem to nie potrzebujesz tu watkow ani listy zeby dostac rezultat.
jesli jest to w ramach cwiczenia to zapewne chodzilo o uzycie kolejki (najlepiej daj tresc zadania).
istotna sprawa - ten program jest po prostu bledny i niezaleznie jak to zsynchronizujesz to i tak bedzie zle.

0

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)

Za niespełnienie tych warunków nie będą przyznawane punkty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1