Tobsen1984
Grünschnabel
Hallo zusammen
Bin gerade an einer Thread Aufgabe dran und versteh nicht warum es in ner Endlos Schleife endet!?
Es gibt drei Klassen:
1. Hauptklasse
2. Mensakasse
3. Studenten
Es gibt 3 Kassen an denen sich 10 Studenten essen holen, bezahlen usw.
Mit dem Interrupted sollen die Threads geschlossen werden und alle gehen gesättigt nach hause...
leider fressen die bei mir ewig
Hoffe mir kann da jemand helfen****?
Die Studenten Klasse:
Die Mensakasse Klasse:
Die Hauptklasse
Bin gerade an einer Thread Aufgabe dran und versteh nicht warum es in ner Endlos Schleife endet!?
Es gibt drei Klassen:
1. Hauptklasse
2. Mensakasse
3. Studenten
Es gibt 3 Kassen an denen sich 10 Studenten essen holen, bezahlen usw.
Mit dem Interrupted sollen die Threads geschlossen werden und alle gehen gesättigt nach hause...
leider fressen die bei mir ewig
Hoffe mir kann da jemand helfen****?
Die Studenten Klasse:
Java:
import java.util.List;
import java.util.Random;
public class Student extends Thread{
private List<Mensakasse> aKassen;
private int aId;
public Student(List<Mensakasse> pKassen, int pId){
this.aKassen = pKassen;
this.aId = pId;
}
public int getID(){
return this.aId;
}
public void run(){
//int anzahl = 0;
while(true){
Mensakasse kasse = this.aKassen.get(0);
Random r = new Random();
int time;
int i = 1;
while(i < this.aKassen.size()){
if(kasse.getSchlangenGroesse()> this.aKassen.get(i).getSchlangenGroesse()){
kasse = this.aKassen.get(i);
}
i++;
}
System.out.println("Student Nr. '"+aId+"' stellt sich an Kasse Nr. '"+kasse.getID()+"' an.");
kasse.studentHinzufuegen(this);
time = r.nextInt(2500);
try {
this.sleep(time);
} catch (InterruptedException e) {
return;
}
finally{
System.out.println("Student Nr. '"+aId+"' hat fertig gegessen und legt eine kleine Pause ein.");
}
time = r.nextInt(8000);
try {
this.sleep(time);
} catch (InterruptedException e) {
return;
}
finally{
System.out.println("Student Nr. '"+aId+"' hat pausiert und holt sich Nachschlag.");
}
}
//this.interrupt();
}
}
Die Mensakasse Klasse:
Java:
import java.util.concurrent.Semaphore;
public class Mensakasse {
private final int aId;
private Semaphore aS = new Semaphore(1,true);
private int aSchlangenGroesse = 0;
public Mensakasse(int pId){
this.aId = pId;
}
public int getID(){
return this.aId;
}
public int getSchlangenGroesse(){
return this.aSchlangenGroesse;
}
public void studentHinzufuegen(Student pStudent){
int sId = pStudent.getID();
try{
this.aSchlangenGroesse++;
this.aS.acquire();
this.aSchlangenGroesse--;
System.out.println("Student Nr. '"+sId+"' bezahlt an Kasse Nr. '"+aId+"'.");
pStudent.sleep(5000);
}catch(InterruptedException e){}
finally{
System.out.println("Student Nr. '"+sId+"' hat an Kasse Nr. '"+aId+"' bezahlt.");
this.aS.release();
}
}
}
Die Hauptklasse
Java:
import java.util.ArrayList;
import java.util.List;
public class Hauptklasse {
public static void main(String[] args){
List<Mensakasse> aKassen = new ArrayList<Mensakasse>();
List<Student> aStudenten = new ArrayList<Student>();
int id;
for(int i=0; i<3; i++){
id= i+1;
Mensakasse neu = new Mensakasse(id);
aKassen.add(neu);
}
for(int i=0; i<10; i++){
id= i+1;
Student neu = new Student(aKassen, id);
aStudenten.add(neu);
}
int x=0;
while(x<aStudenten.size()){
aStudenten.get(x).start();
x++;
}
try {
Thread.currentThread();
Thread.sleep(1500);
} catch (InterruptedException e) {
System.out.println("InterruptedException bei sleep");
return;
}
int y= 0;
while(y<aStudenten.size()){
aStudenten.get(y).interrupt();
if(aStudenten.get(y).isInterrupted()){
System.out.println("Student "+aStudenten.get(y).getID()+" hat genug gegessen und geht nach Hause");
try {
aStudenten.get(y).join();
} catch (InterruptedException e){}
}
y++;
}
System.out.println("Alle Studenten haben genug gegessen und gehen heim.");
return;
}
}
Zuletzt bearbeitet von einem Moderator: