Mit Multi-Thread Datenbank lesen und schreiben

Hallo Leute,
ich versuche mit ExecuterService (n) Threads [Gruppe-A] zu starten 5-10 (auf dem Server können mehr als 10 sein). Ein Thread der [Gruppe-A] bekommt einen Job zu erledigen, ein Thread startet noch 4 Threads [Gruppe-B] auch von einem anderen ExecuterServic, pro Thread der [Gruppe-B] liest Daten und vergleicht sie ob sie in Daten-Tabelle existiert, wenn ja wird die ID zurückgeliefert (FK) sonst wird der Eintrag geschrieben und sein ID zurückgeliefert (also Entfernung von Duplikaten) Hier brauche ich synchronization besonders wenn Daten geschrieben werden gibt es eine Möglichkeit um das Ziel zu erreichen, dass die Daten korrekt geschrieben werden, hier möchte ich Phantom-Read vermeiden.
Phantom-Read bedeuted, daß keine 2 Threads versuchen eine bestimmte ID zu lesen, stellen sie beide fest sie existiret nicht und versuchen jetzt beide diese ID zu schreiben, weil sie UNIQUE sein soll.
habe mit synchronized, Monitor und Lock versucht hilft aber nicht, glaube weil mehrere Threads im Spiel sind.
für eine Idee, Antwort, Vorschlag oder Lösung wie die Implementierung realisiret wird, bedanke ich mich.

Grüße Raed

irgendwas mit ‘synchronized, Monitor und Lock’ wirds wohl sein, dass mehrere Threads im Spiel sind ist da keine unangemessene Härte, sondern sonst wäre es witzlos,
was hast du denn so alles probiert?

für den Anfang nicht mit DB testen, ein Dummy-Thread in dem die Daten sauber in einer Liste landen, der sie vielleicht von Zeit zu Zeit mit System.out.println() ausgibt, reicht auch schon,

die einfachsten Producer/ Consumer-Beispiele taugen hier, bekannt?
nur von verschiedenen Stellen in gemeinsame Datenliste schreiben,
dann kann EIN DB-Thread die Daten schreiben

Danke für die Antwort also diese Applikation war schon mit weniger Threads geschrieben und war OK die Menge der Daten hat sich aber explosionsartig entwickelt
und jetzt soll man sie anpassen also wenn ich die alte starte dann dauert ca. 60 Tage was nicht ideal ist. ich habe gelesen es gibt einen SQL-Befeht insert ignore
vielleicht wird helfen, wollte erst Informationen sammeln vielleicht hat jemand einen Vorschlag oder bessere Idee wie das Problem zu lösen ist.
danke für die Antwort muß man testen und schauen bin gerade dabei. Aber bitte wenn noch jemand Vorschlöge hat bin dankbar Leute. weil mit Multi-Threading bin nicht eng befreundet
und fehlt mir noch was. Danke euch