Hallo!
ich möchte einen Producer/Consumer bauen.
1. Die Hauptklasse empfängt ein bytes array. Diese soll sofort dem producer übergeben werden. Dieser bearbeitet diese noch etwas und legt es in die Queue.
2. Der Consumer wartet darauf das neue Elemente in die Queue gelegt werden.
Wenn ein neuer Wert, beginnt er den Wert abzuarbeiten. Das dauert sicher länger als neue Werte ankommen.
3. Nach Bearbeitung des einen Wert soll er das modifizierte Bytearray an die Main Klasse zurückgeben, welche diese weiter sendet und eine Antwort erwarten => 4
4. Es muss eine Antwort von Punkt 3. innerhalb von 100ms geben.
Wenn ja, Antwort an die Mainklasse zurückgeben.
Wenn nein, Timeout melden und nächsten Queue abarbeiten.
Wie muss ich das aber Umsetzen? Vor allem die Rückgabe an die Main Klasse?
Und es soll auf die Msg ja auch eine Antwort mit einem Timeout geben.
Main Klasse
ich möchte einen Producer/Consumer bauen.
1. Die Hauptklasse empfängt ein bytes array. Diese soll sofort dem producer übergeben werden. Dieser bearbeitet diese noch etwas und legt es in die Queue.
2. Der Consumer wartet darauf das neue Elemente in die Queue gelegt werden.
Wenn ein neuer Wert, beginnt er den Wert abzuarbeiten. Das dauert sicher länger als neue Werte ankommen.
3. Nach Bearbeitung des einen Wert soll er das modifizierte Bytearray an die Main Klasse zurückgeben, welche diese weiter sendet und eine Antwort erwarten => 4
4. Es muss eine Antwort von Punkt 3. innerhalb von 100ms geben.
Wenn ja, Antwort an die Mainklasse zurückgeben.
Wenn nein, Timeout melden und nächsten Queue abarbeiten.
Wie muss ich das aber Umsetzen? Vor allem die Rückgabe an die Main Klasse?
Und es soll auf die Msg ja auch eine Antwort mit einem Timeout geben.
Java:
// Queue Message
public class Message {
private byte[] msg;
public Message(byte[] b){
this.msg=b;
}
public byte[] getMsg() {
return msg;
}
}
Java:
public class Producer implements Runnable {
private BlockingQueue<Message> queue;
public Producer(BlockingQueue<Message> q) {
this.queue = q;
}
public Message msg;
public void setMessage() {
try {
queue.put(msg);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
}
}
Java:
public class Consumer implements Runnable {
private BlockingQueue<Message> queue;
public Consumer(BlockingQueue<Message> q) {
this.queue = q;
}
@Override
public void run() {
try {
while (true) {
Thread.sleep(10);
System.out.println("Consumed " + queue.take().getMsg());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Main Klasse
Java:
BlockingQueue<Message> queue = new ArrayBlockingQueue<Message>(10);
Producer producer = new Producer(queue);
for (int i = 0; i < 10; i++) {
Message msg = new Message(new byte[] { 0x31, 0x32 });
producer.msg = msg;
producer.setMessage();
}
Consumer consumer = new Consumer(queue);
new Thread(producer).start();
new Thread(consumer).start();