2017-08-09 13 views
-5

Ich möchte ein Programm schreiben, die eine bestimmte Tabelle für neue Einträge abfragt und sie in eine Nachricht queue schreibt.Java: Thread Endlosschleife

Ich dachte an eine thread schreiben, die in einer Schleife unendlich und versuche Datenbank zu erhalten exklusive lock und thread.sleep() werden aufgerufen, wenn lock nicht erworben wird.

Dann nach dem Erhalt lock, wenn keine neuen Datensätze in der Datenbank gefunden werden thread.sleep() wird erneut aufgerufen werden. Ist Thread der beste Weg dafür oder sollte etwas wie Timer verwendet werden?

BEARBEITEN: Grundsätzlich läuft die Frage darauf hinaus: Wenn ich eine Oracle-Datenbank mit Java abfragen muss, sollte ich einen Thread schreiben, oder etwas anderes wie ein Timer/shedulexExecutor/trigger?

+3

"Gibt es einen besseren Ansatz?" Fragen sind nicht gut für Stack Overflow geeignet. Sie sollten besser selbst Code schreiben und in [Code Review] (http://codereview.stackexchange.com) veröffentlichen. – Michael

+0

jetzt ein Tag, jede Aufgabe im Zusammenhang mit Polling oder lange Polling wird als eine schlechte Praxis betrachtet ... Sie sollten einige Zuhörer für das aussehen ... –

+0

@ ΦXocę 웃 Пepeúpa ツ Könnten Sie näher ausführen? – user8096068

Antwort

0

Es ist keine gute Idee, den Tisch auf der Produktion zu sperren. Ich würde vorschlagen, eine Trigger-Tabelle zu erstellen und Einträge in der Trigger-Tabelle nur hinzuzufügen, wenn ein neuer Eintrag in die ursprüngliche Tabelle eingefügt wird. Jetzt können Sie Ihren Ansatz für diese Trigger-Tabelle verwenden.

+0

Danke. Aber ich würde immer noch eine Sperre für die Trigger-Tabelle benötigen, ebenso wie eine Spalte in der Tabelle aktualisiert werden muss, sobald sie vom Poller ausgewählt wurde. – user8096068

+0

Sie müssen die Auslösetabelle sperren, aber Sie haben diese Tabelle nur für diese Zwecke erstellt. Warum müssen Sie die Spalte in der Originaltabelle aktualisieren? –

+0

Ich meinte, ich würde immer noch die Trigger-Tabelle sperren müssen, da es eine Spalte in der Trigger-Tabelle gibt, die aktualisiert werden muss. Wie auch immer, mein Hauptproblem ist nicht das Schloss. Es geht darum, ob ein Endlosschleife-Thread die beste Möglichkeit ist, die Tabelle abzufragen. – user8096068

-1

Sie können versuchen, eine feste Intervallüberprüfung zu haben, wie z. B. alle 20 Sekunden, ob die Datenbank nach einem neuen Eintrag durchsucht wird. Machen Sie dieses feste Intervall konfigurierbar (konstant). Bsp .: - Thread.sleep (20)

Verwandte Themen