Sono ancora uno studente che lavora a tempo parziale e quindi cerco sempre di essere consapevole dei modi migliori per fare le cose. Recentemente ho dovuto scrivere un programma per il lavoro in cui il thread principale del programma generava i thread "task" (per ogni record "task" db) che eseguiva alcune operazioni e quindi aggiornava il record per dire che è terminato. Quindi avevo bisogno di un oggetto di connessione al database e degli oggetti PreparedStatement in o disponibili per gli oggetti ThreadedTask.Questo uso di PreparedStatements in una discussione in Java è corretto?
Questo è all'incirca quello che ho finito per scrivere, sta creando un oggetto PreparedStatement
per thread come rifiuto? Ho pensato statica PreparedStatments
potrebbe creare condizioni di gara ...
Thread A stmt.setInt(); Thread B stmt.setInt(); Thread A stmt.execute(); Thread B stmt.execute();
A's non viene mai execed ..
È questo thread-safe? Creare e distruggere oggetti PreparedStatement
che sono sempre gli stessi non è un enorme spreco?
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(...);
}
Non archiviare la connessione, ottenere la connessione quando è necessario. Se è necessaria la prestazione di bettr, utilizzare un pool di connessioni. AS Thilo ha detto di seguito non condividere materiale tra thread. –