Hallo zusammen,
ich habe eine Aufgabe, in welcher ich mit ReentrantLocks folgendes Szenario modellieren soll:
Es gibt eine Party mit einer maximalen Anzahl Gläsern sowie einen Gast der trinkt und einen Gastgeber, welcher Gläser nachfüllt.
Insoweit habe ich dies nun versucht zu schreiben, jedoch erhalte ich beim Ausführen meines Codes NullPointerExceptions und möglicherweise gar einen Deadlock. Ich habe jetzt schon relativ lang mir den Kopf darüber zerbrochen, komme jedoch aber nicht zur Lösung meines Problems. Es wäre echt super, wenn ich hier den richtigen Anstupser bekommen könnte.
Über Hilfe wäre ich echt dankbar.
Beste Grüße
Hier ist mein Code:
ich habe eine Aufgabe, in welcher ich mit ReentrantLocks folgendes Szenario modellieren soll:
Es gibt eine Party mit einer maximalen Anzahl Gläsern sowie einen Gast der trinkt und einen Gastgeber, welcher Gläser nachfüllt.
Insoweit habe ich dies nun versucht zu schreiben, jedoch erhalte ich beim Ausführen meines Codes NullPointerExceptions und möglicherweise gar einen Deadlock. Ich habe jetzt schon relativ lang mir den Kopf darüber zerbrochen, komme jedoch aber nicht zur Lösung meines Problems. Es wäre echt super, wenn ich hier den richtigen Anstupser bekommen könnte.
Über Hilfe wäre ich echt dankbar.
Beste Grüße
Hier ist mein Code:
Java:
package aufgabe1;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Party {
final int MAXSHOTS;
int shots;
Lock lock = new ReentrantLock();
Condition leereGlaeser, volleGlaeser = lock.newCondition();
public Party(int MAXSHOTS){
this.MAXSHOTS = MAXSHOTS;
this.shots = 0;
}
public Lock getLock() {
return lock;
}
public Condition getLeereGlaeser() {
return leereGlaeser;
}
public int getShots() {
return shots;
}
public void setShots(int shots) {
this.shots = shots;
}
public Condition getVolleGlaeser() {
return volleGlaeser;
}
}
Java:
package aufgabe1;
public class Gastgeber extends Thread {
Party party;
final int MAXTIME = 100;
int id;;
public Gastgeber(int id,Party party){
this.party = party;
this.id = id;
}
public String toString(){
return "Gastgeber "+id;
}
public void run(){
while(true){
party.getLock().lock();
try{
while(party.shots==party.MAXSHOTS){
System.out.println(party.shots+" Gastgeber");
party.getLeereGlaeser().await();
}
System.out.println(this+" befüllt ein Glas");
party.shots++;
System.out.println(party.shots);
party.getVolleGlaeser().signalAll();
}
catch(InterruptedException e){}
finally{
party.getLock().unlock();
}
}
}
}
Java:
package aufgabe1;
public class Gast extends Thread{
final int MAXTIME = 1000;
Party party;
int id;
public Gast(int id,Party party){
this.party = party;
this.id = id;
}
public String toString(){
return "Gast "+id;
}
public void run(){
while(true){
party.getLock().lock();
try{
while(party.shots==0)
//System.out.println(party.shots+" Gast");
party.getVolleGlaeser().await();
System.out.println(this+" trinkt ein Glas");
party.shots--;
party.getLeereGlaeser().signalAll();
}
catch (InterruptedException e){}
finally{
party.getLock().unlock();
}
}
}
}