Produzent Verbraucher Problem

safin23

Grünschnabel
Hallo! Ich habe morgen Abend eine Abgabe, komme aber mit der Aufgabe nicht ganz zurecht....Habe das Thema Thread Synchronisation wohl nicht ganz verstanden...
Hier die Aufgabe:

Simulieren Sie eine Warteschlange vor einem Skilift (Schlepplift)
mit folgenden Eigenschaften:
Alle 350 ms kommt ein neuer Skiliftbügel, der zwei Skifahrer befördern kann, wenn 2
Skifahrer da sind, die auf diesen Bügel warten. Der Skilift kann jeweils nur Paare von
Skifahrern befördern, d.h. einzelne Skifahrer müssen warten, bis sie einen Partner finden.
Von der Piste kommen zufällig Skifahrer alle 100 bis 300 ms zur Warteschlange hinzu.
Die Skifahrer von der Piste erhalten fortlaufende Nummern, um sie zu unterscheiden:
Skifahrer(1), Skifahrer(2), …
Habe schon die Klassen SkiFahrer, SkiPiste, SkiLift, WarteSchlange soweit fertig. Was ich nicht hinkriege ist die getMethode() von der Warteschlange. Ich habe mir überlegt eine Klasse SkiFahrerPaar anzulegen..
Hat jemand eine Idee wie ich die get() Methode richtig implementiere damit ich diese dann im Consumer ( SkiLift)einbauen kann?

Code:
public class MonitorMitPuffer {
	
	public static void main (String [] args){
	
	WarteSchlange schlange = new WarteSchlange();
	SkiPiste skipiste = new SkiPiste(schlange);
	Skilift skilift = new Skilift(schlange);
	
	skipiste.start();
	skilift.start();
	}
}
Code:
public class WarteSchlange {
	
	public LinkedList <SkiFahrer> schlange;
	int anzahl;
	
	//Der Warteschlange wird ein SkiFahrer zugefügt
	public synchronized void put (SkiFahrer f) {
		
		while(true){
			
			schlange.add(f);
			anzahl++;
			System.out.println("Der Skifahrer Nr [ "+ anzahl +" ] kommt");
			
		/*	try{
				wait((long) (Math.random() * 300+1 ));	
			}
			catch (InterruptedException e) {
				  System.out.println("Ein Fehler" + e);	*/
		}
	}
	
	//Aus der Warteschlange werden die ersten beiden SkiFahrer entnommen
	public synchronized SkiFahrerPaar get() {
		
		while(schlange.size()<2){
			
			try { wait(); } catch(InterruptedException e) {}
		}
		
		SkiFahrer sf1 = schlange.get(0);
		SkiFahrer sf2 = schlange.get(1);
		schlange.removeFirst();
		schlange.removeFirst();
		
		notifyAll();
		return new SkiFahrerPaar(sf1,sf2);//,schlange.get(1)); 
	}
	
	public WarteSchlange(){
		
		schlange = new LinkedList<SkiFahrer>();
	}
}
Code:
public class SkiPiste extends Thread{
	
	WarteSchlange schlange;
	
	public void run(){
		

		while(true){
				
		    schlange.put(new SkiFahrer());
     		
			try{
				wait((long) (Math.random() * 300+1 ));	
			}
			catch (InterruptedException e) {
				  System.out.println("Ein Fehler" + e);		
		 }	}}

		public SkiPiste( WarteSchlange schlange){
			this.schlange=schlange;
		}}
Code:
public class Skilift extends Thread {
	
	WarteSchlange schlange;
	
	
	public void run(){
		//HIER LIEGT MEIN PROBLEM!!

		while(true){
			
		//	if(schlange.)
			
			/*try{
				wait((long) (Math.random() * 300+1 ));	
			}
			catch (InterruptedException e) {
				  System.out.println("Ein Fehler" + e);
			}
			
			schlange.get();*/
		//	schlange.get().a.;

		}}

	public Skilift(WarteSchlange schlange){
		this.schlange = schlange;
	}}
Code:
public class SkiFahrer {
	
	static int id;
	
	public SkiFahrer(){
		
		id++;
	}}
Code:
public class SkiFahrerPaar {
	
	SkiFahrer a;
	SkiFahrer b;
		
	public SkiFahrerPaar(SkiFahrer a, SkiFahrer b){
		
		this.a = a; this.b = b;
		
	}}