Il thread java.sql.Connection è sicuro?

Per riformulare la domanda: dovrei evitare di condividere istanze di classi che implementano java.sql.Connection tra diversi thread?

Se il driver JDBC è conforms alle specifiche, tecnicamente sì, l’object è thread-safe, ma è necessario evitare di condividere le connessioni tra thread, poiché l’attività sulla connessione significherà che solo un thread sarà in grado di fare qualsiasi cosa alla volta .

È necessario utilizzare un pool di connessioni (come DBCP di Apache Commons ) per garantire che ogni thread abbia la propria connessione.

java.sql.Connection è un’interfaccia. Quindi, tutto dipende dall’implementazione del driver, ma in generale si dovrebbe evitare di condividere la stessa connessione tra thread diversi e utilizzare pool di connessioni. Inoltre, si consiglia inoltre di avere un numero di connessioni nel pool superiore al numero di thread di lavoro.

Questo è piuttosto un thread vecchio, ma per coloro che sono alla ricerca di una risposta per quanto riguarda Microsoft SQL Server, ecco la risposta:

SQLServerConnection non è thread-safe, tuttavia più istruzioni create da una singola connessione possono essere elaborate simultaneamente in thread simultanei.

e

SQLServerConnection implementa una connessione JDBC a SQL Server.

Da tutto quanto sopra, è ansible condividere istruzioni ma non Connections, e nel caso sia necessaria una connessione in ogni thread, è ansible utilizzare un pool di thread.

Leggi di più qui

Documenti Oracle JDBC e Multithreading :

Poiché tutti i metodi dell’API JDBC di Oracle sono sincronizzati, se due thread tentano di utilizzare simultaneamente l’object di connessione, uno sarà costretto ad attendere fino a quando l’altro non ne avrà terminato l’utilizzo.

Quindi potrebbe essere sicuro nel caso di Oracle, ma l’accesso concorrente risentirebbe di un collo di bottiglia.

Avevamo ArrayOutOfBoundsException nella cache dell’istruzione Websphere della sua pooleddatasource, e abbiamo dovuto disabilitare quella cache.

Abbiamo avuto un trattamento che si stava bloccando.

Tutto ciò a causa dell’attuale accesso alla connessione, quindi la conclusione con la pratica della vita reale, è che non devi farlo.