Todavía soy un estudiante universitario que solo trabaja a tiempo parcial y por eso siempre trato de ser consciente de mejores formas de hacer las cosas. Recientemente tuve que escribir un programa para el trabajo donde el hilo principal del programa generaba hilos de "tareas" (para cada registro de "tarea" db) que realizaba algunas operaciones y luego actualizaba el registro para decir que había terminado. Por lo tanto, necesitaba un objeto de conexión de base de datos y los objetos PreparedStatement en o disponibles para los objetos ThreadedTask.¿Es correcto este uso de PreparedStatements en un subproceso en Java?
Esto es más o menos lo que terminé escribiendo, ¿está creando un objeto PreparedStatement
por cada hilo de un desperdicio? Pensé estática PreparedStatments
podría crear condiciones de carrera ...
Thread A stmt.setInt(); Thread B stmt.setInt(); Thread A stmt.execute(); Thread B stmt.execute();
excelentes calificaciones nunca se Execed ..
¿Este hilo de seguridad? ¿Crear y destruir PreparedStatement
objetos que son siempre los mismos no es una gran pérdida?
public class ThreadedTask implements runnable {
private final PreparedStatement taskCompleteStmt;
public ThreadedTask() {
//...
taskCompleteStmt = Main.db.prepareStatement(...);
}
public run() {
//...
taskCompleteStmt.executeUpdate();
}
}
public class Main {
public static final db = DriverManager.getConnection(...);
}
No guarde la conexión, obtenga la conexión cuando la necesite. Si necesita un rendimiento de bettr use un grupo de conexiones. AS Thilo dijo a continuación no compartir cosas entre subprocesos. –