Kennt sich hier jemand mit der genaueren Beschaffenheit von Verbindungen des MySQL Connector/J 2.0 aus?
Ich arbeite an einem Chatserver, dessen Benutzerverwaltung mit MySQL realisiert ist. Nun kann es ja passieren, dass sich zwei Benutzer gleichzeitig einloggen ---> Thread A holt sich ein Statement von der Verbindung, schickt ein Query ab, während Thread B dies fast gleichzeitig auch macht. Ich kann dieses Szenario nicht erzwingen, um die Auswirkungen (z.B. eine Exception in Thread A oder beschädigtes ResultSet) herauszufinden, und deswegen frage ich mich: Wie muss ich eine Verbindung synchronisieren, um sie Thread-sicher zu machen?
a) garnicht;
b)
oder
c)
Noch einmal zur Verdeutlichung: In Beispiel b) ist die Verarbeitung des ResultSet in den synchronisierten Block mit einbezogen, bei c) steht sie außerhalb.
Ich arbeite an einem Chatserver, dessen Benutzerverwaltung mit MySQL realisiert ist. Nun kann es ja passieren, dass sich zwei Benutzer gleichzeitig einloggen ---> Thread A holt sich ein Statement von der Verbindung, schickt ein Query ab, während Thread B dies fast gleichzeitig auch macht. Ich kann dieses Szenario nicht erzwingen, um die Auswirkungen (z.B. eine Exception in Thread A oder beschädigtes ResultSet) herauszufinden, und deswegen frage ich mich: Wie muss ich eine Verbindung synchronisieren, um sie Thread-sicher zu machen?
a) garnicht;
b)
Code:
ResultSet res;
synchronized (connection) {
res = connection.createStatement().executeQuery("SELECT * FROM table");
while(res.next()) {
// Daten verarbeiten
}
}
c)
Code:
ResultSet res;
synchronized (connection) {
res = connection.createStatement().executeQuery("SELECT * FROM table");
}
while(res.next()) {
// Daten verarbeiten
}
Noch einmal zur Verdeutlichung: In Beispiel b) ist die Verarbeitung des ResultSet in den synchronisierten Block mit einbezogen, bei c) steht sie außerhalb.