Ruft z.B ein Thread A für ein Exchanger-Objekt obj die Methode tauschen auf, wird er blockiert bis ein anderer Thread B ebenfalls für obj die Methode aufruft. In diesem Moment tauschen die beiden Threads ihre jeweils der Methode tauschen als Parameter übergebenen Daten aus.
das Object wird eigentlich getauscht, aber habe ich immer Verklemmung. Kann jemand mir bitte helfen?
Vielen Dank im Voraus
das Object wird eigentlich getauscht, aber habe ich immer Verklemmung. Kann jemand mir bitte helfen?
Vielen Dank im Voraus
Java:
package vermittler;
public class Exchanger<T> {
private boolean flag = false;
public synchronized T tauschen(T daten) {
return daten;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
class Worker implements Runnable {
private String msg;
Exchanger<String> exchanger;
Object object;
public Worker(String msg, Exchanger<String> exchanger, Object o) {
this.msg = msg;
this.exchanger = exchanger;
this.object = o;
}
@Override
public void run() {
synchronized (object) {
if (!Thread.currentThread().isInterrupted()) {
System.out.println("Producer: " + exchanger.tauschen(msg));
try {
Thread.sleep(1000);
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
System.out.println("Consumer: " + exchanger.tauschen(msg));
object.notify();
}
}
}
}
class Main {
public static void main(String[] args) throws InterruptedException {
Exchanger<String> exchanger = new Exchanger<>();
Worker worker = new Worker("I am Producer", exchanger, Lock.lock1);
Worker worker1 = new Worker("I am Consumer", exchanger, Lock.lock1);
Thread thread = new Thread(worker);
Thread thread1 = new Thread(worker1);
thread.start();
thread.interrupt();
//Thread.sleep(500);
thread1.start();
}
}
class Lock {
final static Object lock1 = new Object();
final static Object lock2 = new Object();
}