Ik zou willen voorstellen om alle SQL-acties van meerdere threads in een tussenliggende gegevensstructuur in de wachtrij te plaatsen en vervolgens vanuit een enkele thread in de database te plaatsen. Het is mogelijk om de thread veilige tussenstructuren te hebben zoals ConcurrentHashMap
, ConcurrentLinkedQueue
of je kunt gewoon synchroniseren als je ermee werkt.
Zo hoeft u de transactie zelfs niet van tevoren te starten. De lopende gegevens zijn misschien minder veilig, maar ik neem aan dat ze in de database niet veel veiliger zijn zolang de transactie nog niet is vastgelegd.
Dit kan natuurlijk alleen als je select
. niet hebt overzichten die niet-vastgelegde transactiegegevens uit dezelfde transactie halen. Om op de een of andere manier van dergelijke vragen af te komen, kan een nieuw ontwerp nodig zijn.
Gebruik CountDownLatch
om te detecteren wanneer alle gegevens gereed zijn en de thread voor het schrijven van de database zijn actie zou moeten starten. Als dit nooit gebeurt, gebruik dan het reactorpatroon voor de thread voor het schrijven van de database.