2016-04-22 12 views
0

Ich habe 2 Threads in einem einfachen Producer-Consumer-Szenario verwaltet um eine LinkedBlockingQueue.LinkedBlockingQueue - Producer/Consumer

Im Consumer-Thread verwende ich take(), d. H. Ich möchte den Verbraucher blockieren, während ein Element in die Warteschlange kommt.

Ist es in Ordnung, wenn ich im Producer-Thread offer() zur Warteschlange hinzufügen, und nicht put()? Würde das irgendwelche Probleme verursachen?

Ich meine, bedeutet mit take() implizieren, ich sollte auch put verwenden?

Ich denke nicht, aber ich will ganz sicher sein.

Antwort

1

Nein, es gibt kein Problem mit offer auf dem Hersteller, was auch immer Sie auf der Verbraucherseite verwenden.

Dies wäre ein üblicher Mechanismus, um dem Hersteller zu ermöglichen, zu einer von mehreren Warteschlangen zu wechseln, er könnte offer in jeder Warteschlange aufrufen, bis es erfolgreich ist. Es könnte sogar put in der letzten Warteschlange aufrufen.

0

offer und put unterscheiden sich nur dadurch, dass put wartet für eine volle Warteschlange Raum zu haben, während offer (mit optionaler Timeout) wird einfach falsch zurückgeben (ohne das Element hinzufügen), wenn die Warteschlange voll ist (und add wird werfen eine Ausnahme).

Solange Ihr Code diese Unterschiede berücksichtigt, gibt es keine Probleme mit der von Ihnen verwendeten Methode (obwohl es natürlich Zeiten geben wird, in denen eine für eine bestimmte Aufgabe besser ist).

Verwandte Themen