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;
}
}