Guten Abend Zusammen,
Ich beziehe mich auf das Beispiel von Oracle. Um einen Deadlock hier zu verhindern würde man ja am einfachsten die Klasse Friends anpassen und ein Lock setzen. Nun möchte ich jedoch die Threads in der Methode doSomething() "kontrollieren", wie könnte solch ein Design aussehen?, mir fehlt gerade etwas die Idee?
Danke für eure Ideen
Danke für euer Feedback
Ich beziehe mich auf das Beispiel von Oracle. Um einen Deadlock hier zu verhindern würde man ja am einfachsten die Klasse Friends anpassen und ein Lock setzen. Nun möchte ich jedoch die Threads in der Methode doSomething() "kontrollieren", wie könnte solch ein Design aussehen?, mir fehlt gerade etwas die Idee?
Danke für eure Ideen
Danke für euer Feedback
Java:
public class Deadlock {
void Something() throws InterruptedException {
final Friend alphonse = new Friend("Alphonse");
final Friend gaston = new Friend("Gaston");
Thread gastonThread = new Thread(new Runnable() {
public void run() {
alphonse.bow(gaston);
}, "Gaston");
}
Thread alphonseThread = new Thread(new Runnable() {
public void run() {
gaston.bow(alphonse);
}, "Alphonse");
}
alphonseThread.start();
gastonThread.start();
alphonseThread.join();
gastonThread.join();
}
public static void main(String[] args) throws InterruptedException {
Deadlock d = new Deadlock();
d.doSomething();
}
}
class Friend {
private final String name;
// private static final Object globalLock = new Object();
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
// synchronized (globalLock){
System.out.format("%s: %s" + " has bowed to me!%n", this.name,
bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower){
// synchronized (globalLock){
System.out.format("%s: %s" + " has bowed back to me!%n", this.name,
bower.getName());
}
}