Jag tror inte att det är vanligt att göra databasanslutningar trådsäkra. Vanligtvis är det du vill ha antingen:
- Serialisera åtkomsten till någon del av din servlet så att det inte finns mer än en servlet som kör kod åt gången (t.ex. implementera
SingleThreadModel
gränssnitt). - Låsa en viss tabell/tabellsida/rad så att du kan arbeta på en viss tupel (genom att ändra databasisoleringsnivån).
- Använda optimistisk låsning för att upptäcka modifierade rader i en tabell (använda något referensattribut i tabellen för att kontrollera om den aktuella versionen är densamma som den i tabellen).
AFAIK, den typiska användningen av ThreadLocal<Connection>
är att lagra en unik databasanslutning per tråd, så att samma anslutning kan användas i olika metoder i din affärslogik utan att behöva skicka den som en parameter varje gång. Eftersom implementeringen av den gemensamma servletbehållaren använder en tråd för att uppfylla en HTTP-begäran, är det garanterat att två olika förfrågningar använder två olika databasanslutningar.