So, darf die Aufgabe hier im Internet geschrieben werden?
Ich hab das mal für dich gemacht, noch zu verbessern, wie ich mir das vorstelle:
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package dasisttest;
/**
* @author CB at FBW.net
*/
public class DasIstTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Raum raum = new Raum();
//for (int i = 0; i < 11; i++) {
new Pati("", raum) .start();
new Pati("Leon", raum) .start();
new Pati("Lukas / Lucas", raum) .start();
new Pati("Ben", raum) .start();
new Pati("Finn / Fynn", raum) .start();
new Pati("Jonas", raum) .start();
new Pati("Paul", raum) .start();
new Pati("Luis / Louis", raum) .start();
new Pati("Maximilian", raum) .start();
new Pati("Luca / Luka", raum) .start();
new Pati("Felix", raum) .start();
new Pati("Tim", raum) .start();
//}
}
}```
Quelle: www beliebte vornamen de, 2010
```/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package dasisttest;
/**
* @author CB at FBW.net
*/
public class Pati extends Thread {
private String name = "oh";
private Raum r;
public Pati(String name, Raum r) {
// null nicht vergessen
this.name = name;
this.r = r;
}
@Override
public void run() {
try {
int id = r.registrieren(this);
Thread.sleep((int) (Math.random() * 5001) + 3000);
r.betreten(id);
Thread.sleep((int) (Math.random() * 5001) + 3000);
r.verlassen(id);
Thread.sleep((int) (Math.random() * 5001) + 3000);
System.out.println(name + id + " wurde behandelt.");
} catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
}
}
}```
```/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package dasisttest;
import java.util.UUID;
/**
* @author CB at FBW.net
*/
public class Raum {
private boolean besetzt = false;
public synchronized int registrieren(Pati p) {
System.out.println(p + " hat sich registriert (und wartet).");
return UUID.randomUUID().hashCode();
}
public synchronized boolean betreten(int id) throws InterruptedException {
System.out.println(id + " möchte Raum betreten und wartet.");
while (besetzt) {
wait();
}
System.out.println(id + " hat den Raum betreten.");
return (besetzt = true);
}
public synchronized boolean verlassen(int id) {
if (besetzt) {
System.out.println(id + " hat den Raum verlassen.");
besetzt = false;
notifyAll();
return true;
}
System.out.println("Something went wrong. :(");
notifyAll();
return false;
}
}```
run:
Thread[Thread-0,5,main] hat sich registriert (und wartet).
Thread[Thread-11,5,main] hat sich registriert (und wartet).
Thread[Thread-10,5,main] hat sich registriert (und wartet).
Thread[Thread-8,5,main] hat sich registriert (und wartet).
Thread[Thread-9,5,main] hat sich registriert (und wartet).
Thread[Thread-5,5,main] hat sich registriert (und wartet).
Thread[Thread-7,5,main] hat sich registriert (und wartet).
Thread[Thread-6,5,main] hat sich registriert (und wartet).
Thread[Thread-2,5,main] hat sich registriert (und wartet).
Thread[Thread-4,5,main] hat sich registriert (und wartet).
Thread[Thread-3,5,main] hat sich registriert (und wartet).
Thread[Thread-1,5,main] hat sich registriert (und wartet).
-488510062 möchte Raum betreten und wartet.
-488510062 hat den Raum betreten.
-1015717788 möchte Raum betreten und wartet.
-1693518534 möchte Raum betreten und wartet.
1588632151 möchte Raum betreten und wartet.
-2133419254 möchte Raum betreten und wartet.
749199559 möchte Raum betreten und wartet.
422793031 möchte Raum betreten und wartet.
101532789 möchte Raum betreten und wartet.
1167190268 möchte Raum betreten und wartet.
686505792 möchte Raum betreten und wartet.
-446444601 möchte Raum betreten und wartet.
-2077086136 möchte Raum betreten und wartet.
-488510062 hat den Raum verlassen.
-2077086136 hat den Raum betreten.
-2077086136 hat den Raum verlassen.
-1015717788 hat den Raum betreten.
Luca / Luka-2077086136 wurde behandelt.
Leon-488510062 wurde behandelt.
-1015717788 hat den Raum verlassen.
-446444601 hat den Raum betreten.
Maximilian-1015717788 wurde behandelt.
-446444601 hat den Raum verlassen.
-1693518534 hat den Raum betreten.
-1693518534 hat den Raum verlassen.
686505792 hat den Raum betreten.
Luis / Louis-446444601 wurde behandelt.
Felix-1693518534 wurde behandelt.
686505792 hat den Raum verlassen.
1588632151 hat den Raum betreten.
1588632151 hat den Raum verlassen.
1167190268 hat den Raum betreten.
Tim686505792 wurde behandelt.
1167190268 hat den Raum verlassen.
-2133419254 hat den Raum betreten.
Jonas1588632151 wurde behandelt.
-2133419254 hat den Raum verlassen.
101532789 hat den Raum betreten.
Paul1167190268 wurde behandelt.
101532789 hat den Raum verlassen.
749199559 hat den Raum betreten.
-2133419254 wurde behandelt.
Lukas / Lucas101532789 wurde behandelt.
749199559 hat den Raum verlassen.
422793031 hat den Raum betreten.
Ben749199559 wurde behandelt.
422793031 hat den Raum verlassen.
Finn / Fynn422793031 wurde behandelt.
BUILD SUCCESSFUL (total time: 1 minute ?? seconds)
1. Debug- Ausgaben lassen den Code nicht schlank aussehen,
2. toString() überschrieben,
3. Raum muss sich die IDs merken,
4. Raum muss sicherstellen, dass bei (registrieren,) betreten, verlassen nicht irgendwer sich Zugang.
Das wär's hoffentlich erstmal. Grüße.