Pregunta

¿El controlador estándar MySQL JDBC es seguro para subprocesos? Específicamente, quiero usar una sola conexión en todos los hilos, pero cada declaración solo se usará en un solo hilo. ¿Hay ciertos escenarios que son seguros y otros que no lo son? ¿Cuál es tu experiencia aquí?

¿Fue útil?

Solución

Las transacciones se inician / confirman por conexión. A menos que esté haciendo cosas muy específicas (realmente no puedo pensar en un ejemplo en el que eso se justifique para ser honesto), es mejor que tenga un grupo de conexiones y una conexión por hilo.

Otros consejos

Si autocommit = 1, entonces es muy factible que múltiples hilos compartan la misma conexión, siempre que el acceso a la conexión esté sincronizado. Si autocommit = 0, tendrá que controlar el acceso a la conexión a través de algún tipo de mutex hasta que ocurra la confirmación.

A menos que esté absolutamente limitado en la cantidad de conexiones que puede tener su aplicación, un grupo de conexiones puede ser una alternativa más viable.

Según mi experiencia reciente, el objeto Connection no es seguro para subprocesos en Connector / J 5.1.33.

Me he encontrado con una situación de bloqueo descrita en error 67760 . No estoy seguro si es un error, pero un consejo razonable de la discusión fue:

  

[12 de diciembre de 2012 20:33] Todd Farmer

     

No utilice un solo objeto de conexión en varios subprocesos   sin sincronización adecuada. Conector / J - y más importante,   el protocolo cliente-servidor MySQL - no permite concurrentes   operaciones que usan el mismo objeto Connection. Si un objeto de conexión   debe compartirse entre hilos, es responsabilidad del   autor del código de la aplicación para garantizar que las operaciones se serialicen correctamente.

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