Jeg vil foreslå at sætte alle SQL-handlinger fra flere tråde i kø i en mellemliggende datastruktur og derefter lægge i databasen fra en enkelt tråd. Det er muligt at have trådsikre mellemstrukturer som ConcurrentHashMap
, ConcurrentLinkedQueue
eller du kan bare synkronisere, når du arbejder med det.
På denne måde behøver du ikke engang at starte transaktionen på forhånd. De afventende data kan være mindre sikre, men jeg antager, at de ikke er meget mere sikre i databasen, mens transaktionen ikke er forpligtet endnu.
Dette kan selvfølgelig kun fungere, hvis du ikke har select
erklæringer, der vælger ikke-forpligtede transaktionsdata fra den samme transaktion. At slippe af med sådanne forespørgsler på en eller anden måde kan kræve omdesign.
Brug CountDownLatch
for at registrere, hvornår alle data er klar, og databaseskrivetråden skal starte sin handling. Hvis det aldrig sker, skal du bruge reaktormønster til databaseskrivetråden.