Pregunta

Para reformular la pregunta: ¿Qué debo evitar compartir instancias de clases que implementan java.sql.Connection entre los diferentes hilos

?
¿Fue útil?

Solución

Si el controlador JDBC es espec-compatible, entonces técnicamente sí, el objeto es seguro para subprocesos, pero se debe evitar compartir conexiones entre los hilos, ya que la actividad en la conexión significará que sólo un hilo será capaz de hacer cualquier cosa a la vez.

Debe utilizar un pool de conexiones (como Apache Commons DBCP ) para asegurar que cada hilo tiene su propia conexión.

Otros consejos

java.sql.Connection es una interfaz. Por lo tanto, todo depende de la implementación del conductor, pero en general se debe evitar compartir la misma conexión entre los diferentes hilos y agrupaciones de conexiones utilización. Además también se aconseja tener número de conexiones en el grupo más alto que el número de subprocesos de trabajo.

Esto es más bien un viejo hilo, pero para aquellos que están buscando una respuesta con respecto a Microsoft SQL Server, aquí está la respuesta:

  

SQLServerConnection no es hilo sin embargo varias instrucciones de seguridad, creados a partir de una única conexión puede estar procesando simultáneamente en hilos concurrentes.

y

  

SQLServerConnection implementa una conexión JDBC de SQL Server.

A partir de todo lo anterior, se puede compartir declaraciones pero no en conexiones y, en caso de que necesite una conexión en cada hilo, es posible utilizar un grupo de subprocesos.

Leer más aquí

JDBC y documentos Multihilo :

  

Debido a que se sincronizan todos los métodos de la API JDBC de Oracle, si dos subprocesos intentan utilizar el objeto de conexión de forma simultánea, entonces uno se verá obligado a esperar hasta que el otro termina su uso.

Así que puede ser seguro en caso de Oracle, pero el acceso simultáneo sufriría de cuello de botella.

ArrayOutOfBoundsException tenido en la memoria caché de Websphere declaración de que es PooledDataSource, y tuvimos que desactivar esa caché.

Hemos tenido un tratamiento que estaba bloqueando sí mismo.

Todo esto a causa del acceso actual a la conexión, por lo que la celebración por la práctica de la vida real, es que no se debe hacer eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top