Potrzebuje pomocy z synchronizacja. W zadaniu 1.Watek ma wkladac towary do listy a 2.Watek zliczac ich wage. No i tu zaczyna sie problem wszystko pieknie dziala tylko nie wiem jak wyjsc z drugiego watku.
towary.txt moze byc roznej wielkosci.
Moje kody:
public class Towar {
private int id;
private int waga;
public Towar(int id, int waga){
this.id=id;
this.waga=waga;
}
public int getWaga(){
return waga;
}
}
import java.util.ArrayList;
public class KontenerTowary {
private ArrayList<Towar> towary;
public KontenerTowary(){
towary = new ArrayList<>();
}
public synchronized void putTowar(int id, int waga){
towary.add(new Towar(id,waga));
notify();
}
public synchronized int getTowary(int i){
try {
wait();
} catch (InterruptedException e) {}
notify();
return towary.get(i).getWaga();
}
public int getSize(){
return towary.size();
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Watek1 extends Thread {
private StringTokenizer tokeny;
private KontenerTowary towary;
public Watek1(KontenerTowary towary){
this.towary=towary;
tokeny = giveToken();
}
public void run(){
int i = 0;
while(tokeny.hasMoreTokens()){
try{
sleep(1);
}catch (InterruptedException e) {}
int id = Integer.parseInt(tokeny.nextToken());
int waga = Integer.parseInt(tokeny.nextToken());
towary.putTowar(id, waga);
i++;
if(i%200==0){
System.out.println("utworzono "+i+" objektow");
}
}
System.out.println("----> koniec dodawania do kontenera");
}
public StringTokenizer giveToken(){
String txt = "";
File file = new File("C:\\Eclipse\\Workspace\\towary.txt");
Scanner objekty;
try {
objekty = new Scanner(file);
} catch (FileNotFoundException e) {
System.out.println("Nie ma pliku");
objekty = null;
System.exit(0);
}
while(objekty.hasNextLine())
txt += objekty.nextLine()+"\n";
return new StringTokenizer(txt);
}
}
public class Watek2 extends Thread {
private KontenerTowary towary;
private int sumaWaga = 0;
public Watek2(KontenerTowary towary) {
this.towary = towary;
}
public void run() {
int i = 0;
int s = 1;
while (i==towary.getSize()) {
sumaWaga += towary.getTowary(i);
if (s%100==0)
System.out.println("Policzono wage "+s+" towarów");
i++;
s++;
}
System.out.println(sumaWaga);
}
}
i klasa testujaca
public class Main {
public static void main(String[] args) throws InterruptedException {
KontenerTowary kt= new KontenerTowary();
Thread watek1 = new Watek1(kt);
Thread watek2 = new Watek2(kt);
watek1.start();
watek2.start();
}
}
Prosze o pomoc termin nieublagalnie zbliza sie ku koncowi a ja nie moge sobie poradzic z (chyba) ostatnia rzecza