Frage

umformulieren Um die Frage: soll ich teilen Instanzen von Klassen zu vermeiden, die java.sql.Connection zwischen verschiedenen Threads implementieren

?
War es hilfreich?

Lösung

Wenn der JDBC-Treiber ist spec-kompatibel ist, dann ja technisch gesehen, ist das Objekt Thread-sicher, aber Sie sollten den Austausch Verbindungen zwischen Threads vermeiden, da die Aktivität auf der Verbindung bedeutet, dass nur ein Thread der Lage sein wird, etwas zu tun zu einer Zeit.

Sie sollten einen Verbindungspool verwenden (wie Apache Commons DBCP ), um sicherzustellen, dass jeder Thread erhält eine eigene Verbindung.

Andere Tipps

java.sql.Connection ist eine Schnittstelle. Also, es hängt alles von der Umsetzung des Fahrers, aber im Allgemeinen sollten Sie vermeiden, dass die gleiche Verbindung zwischen verschiedenen Threads und Verwendung Verbindungspools zu teilen. Auch ist es auch in dem Pool zu haben, Anzahl der Verbindungen empfohlen, höher als die Anzahl der Worker-Threads.

Dies ist eher ein alter Thread, aber für diejenigen, die auf eine Antwort in Bezug auf Microsoft SQL Server suchen, hier ist die Antwort:

  

SQLServerConnection ist nicht sicher fädeln jedoch mehrere Anweisungen aus einer einzigen Verbindung erstellt können gleichzeitig in gleichzeitigen Threads werden verarbeitet.

und

  

SQLServerConnection implementiert eine JDBC-Verbindung zu SQL Server.

Von all den oben genannten, können Sie Anweisungen teilen, aber nicht auf Verbindungen, und für den Fall, müssen Sie eine Verbindung in jedem Thread, können Sie einen Thread-Pool verwendet werden.

Lesen Sie mehr hier

Oracle JDBC und Multithreading docs:

  

Da alle Oracle-JDBC-API-Methoden synchronisiert werden, wenn zwei Threads gleichzeitig versuchen, das Verbindungsobjekt zu verwenden, dann wird man gezwungen sein, zu warten, bis die andere seine Verwendung beendet ist.

So ist es in Oracle Fall sicher sein kann, aber die gleichzeitige Zugriff würde von Engpass leiden.

Wir hatten ArrayOutOfBoundsException auf der Websphere Statement-Cache von seinem pooleddatasource, und wir hatten diesen Cache zu deaktivieren.

Wir hatten eine Behandlung, die selbst blockiert wurde.

All das wegen des aktuellen Zugriff auf die Verbindung, so die Schlussfolgerung von wirklichem Leben der Praxis ist, dass Sie das nicht tun müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top