Ich habe zwei synchronized
Methoden, von denen jede von einem anderen Thread
ausgeführt wird.Wie vermeidet man die gleichzeitige Ausführung von zwei Methoden?
public synchronized ResultSet dbExecuteQuery(String queryStmt);
public synchronized void dbExecuteUpdate(String queryStmt);
Wie kann ich sicherstellen, dass ihre Ausführung nicht "überlappt"?
Eine Lösung, die mir in den Sinn kommt, ist die folgende:
public synchronized ResultSet dbExecute(String queryStmt, boolean isUpdate) {
if (isUpdate) {
dbExecuteUpdate(queryStmt);
return null;
} else
return dbExecuteQuery(queryStmt);
}
Aber es bedeutet, würde ich den ganzen Code in das gesamte Projekt verwendet ändern. Gibt es einen saubereren Weg, es zu tun?
Ihr erster Schnipsel gerade fein ist (vorausgesetzt, beide Threads verwenden das gleiche Objekt ihre Abfragen auszuführen). Was glaubst du synchronisiert? –
Das heißt, eine relationale Datenbank hat ACID-Transaktionen, um ** gleichzeitige ** Abfragen auf sichere Weise ausführen zu können. Du solltest sie nicht synchronisieren. Und das wird sowieso nicht funktionieren, sobald mehrere Clients auf dieselbe Datenbank abzielen. –