Also in Ada Programmiersprache ist ein Rendezvous eine Methode der Interprozess-Synchronisation/Message-Passing. Wie implementiere ich diesen Mechanismus in Java (zusammen mit Task Suspending und Selective Wait)? Ich habe Java Remote-Methodenaufruf und Exchange-Klasse betrachtet, aber ich muss noch eine geeignete Lösung finden.Ada Rendezvous Gegenstück in Java
Antwort
Nicht vertraut mit ada aber eine schnelle Google auf ada Rendezvous empfiehlt Ihnen, für eine der BlockingQueue Implementierungen suchen können, möglicherweise SynchronousQueue.
Vielleicht, wenn Sie beschreiben, was Sie passieren möchten, wenn eine Nachricht übergeben wird, könnten wir mehr helfen.
Ich entschied mich, mit SynchronousQueue zu gehen und (sieht aus wie) es funktioniert. Grundsätzlich hatte ich den Auftrag, eine 8-förmige Spur zu schaffen, auf der man Autos ablegen und laufen lassen kann. Ich musste sicherstellen, dass sie nicht an der Kreuzung abstürzen. Car-Threads machen Aufrufe an den Track-Prozess, um zu fragen, ob sie sich vorwärts bewegen können, und wenn 2 Autos an der Kreuzung ankommen, darf ein zufälliger durchfahren werden, wenn die Kreuzung leer ist. – kbijoch
@kbijoch - Gerne helfen, aber Ihre Beschreibung klingt eher so, als würden Sie mehr nach einem [Semaphore] suchen (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html) oder ein [CountDownLatch] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html), aber wenn die 'SynchronousQueue' für Sie funktioniert, dann gehen Sie dafür. – OldCurmudgeon
Ja, ich weiß, aber mein Professor sagte uns ausdrücklich, Adas Rendezvous zu implementieren. Ich weiß nicht, Motivation, dies aber er sagte, meine Lösung ist in Ordnung so was auch immer. – kbijoch
Die schwierigsten Teile, die in Java implementiert werden, sind selektive Warte- und Eingabeschlangen. Eine blockierende Warteschlange ist eine ungefähre Simulation eines geschützten Eintrags in Ada ohne selektives Warten.
Ich glaube nicht, dass es eine Entsprechung zur Ada Select-Anweisung in Java gibt. Es gibt auch keine Möglichkeit, eine Eingabewarteschlange mit programmierbarer Warteschlangenrichtlinie bereitzustellen. Die Java wait/notify Kombination aktiviert einen wartenden Thread, aber Sie wissen nie welchen. Der Thread, der tatsächlich durch einen Benachrichtigungsbefehl aktiviert wird, basiert auf Rennbedingungen und hat den Effekt, scheinbar zufällig zu sein. Die Analyse zeigt, dass jeder wartende Thread erwartet durch eine Benachrichtigung an einem bestimmten Punkt in der Programmausführung aktiviert werden kann, aber es gibt keine Garantie in Java über die Reihenfolge der Thread-Aktivierung, oder sogar wenn ein bestimmter Thread jemals von einer Wartezeit aktiviert wird Zustand.
- 1. Wie Rendezvous-Punkt in Jmeter
- 2. Java-Config Gegenstück von wss: verbindlich?
- 3. Ada aws (Ada Webserver) in Windows 10
- 4. Tibco Rendezvous: Wie komplexe Msg-Antworten erstellen?
- 5. Ada: Wie eine Java-Zeichenfolge darstellen?
- 6. Sendet Daten von Java/Erlang an Ada
- 7. Gegenstück von __getattr__
- 8. Benötigen Android-Gegenstück zu AudioInputStream
- 9. char_array Zuordnung in Ada
- 10. Quadratische Gleichung in Ada
- 11. In Ada generische Pakete
- 12. Multithreading in Ada
- 13. Gibt es ein Theme.Holo.Light.Dialog-Gegenstück in Material?
- 14. Tracking Header-Abhängigkeiten in Ada?
- 15. Ada-ähnliche Typen in Nimrod
- 16. Beliebige Länge Integer in Ada
- 17. Design Pattern Referenzimplementierungen in Ada?
- 18. Rückgabe einer Funktion in Ada
- 19. Warten auf Aufgaben in Ada
- 20. So fügen Sie die Rendezvous-Funktion in loadrunner ein
- 21. Dezember Ada & Ausnahme
- 22. Ada Generisches Paket Erweiterung
- 23. Ada out Parameter
- 24. Auswahlsortierung mit Ada
- 25. Ada: String zulässigen Wert?
- 26. Ada mehrere Einträge auswählen
- 27. Ada und Assembly
- 28. Unterdrücken der Ada-Einschränkung
- 29. ADA Entwicklungsumgebung 2.017
- 30. Ada: Verletzung der "No_Exception_Propagation"
Angesichts der Tatsache, dass Java-Nebenläufigkeitsfunktionen Low-Level (und fehleranfällig) sind, sollte es möglich sein, das Äquivalent der High-Level-Concurrency-Funktionen von Ada zu implementieren. Die Frage ist, wie viel Aufwand Ihr Projekt Ihnen ermöglichen wird. Wenn Sie wirklich eine Rendezvous-Semantik benötigen, sollten Sie vielleicht abschätzen, wie lange es dauern würde, um das gewünschte Verhalten in Ada und in Java zu implementieren und es denen zu präsentieren, die das Budget kontrollieren. –