Вопрос

Перефразируя вопрос:следует ли мне избегать совместного использования экземпляров классов, которые реализуют java.sql.Connection между разными потоками?

Это было полезно?

Решение

Если драйвер JDBC соответствует спецификации, то технически да, объект является потокобезопасным, но вам следует избегать совместного использования соединений между потоками, поскольку активность соединения будет означать, что только один поток сможет делать что-либо одновременно. .

Вам следует использовать пул соединений (например, Apache Commons DBCP), чтобы гарантировать, что каждый поток получит собственное соединение.

Другие советы

java.sql.Connection — это интерфейс.Итак, все зависит от реализации драйвера, но в целом вам следует избегать совместного использования одного и того же соединения между разными потоками и использовать пулы соединений.Также рекомендуется иметь количество соединений в пуле больше, чем количество рабочих потоков.

Это довольно старая тема, но для тех, кто ищет ответ относительно Microsoft SQL Server, вот ответ:

SQLServerConnection не является потокобезопасным, однако несколько операторов, созданных из одного соединения, могут обрабатываться одновременно в параллельных потоках.

и

SQLServerConnection реализует соединение JDBC с SQL Server.

Из всего вышесказанного вы можете совместно использовать операторы, но не соединения, и если вам нужно соединение в каждом потоке, вы можете использовать пул потоков.

Читать далее здесь

Оракул JDBC и многопоточность документы:

Поскольку все методы Oracle JDBC API синхронизированы, если два потока попытаются использовать объект соединения одновременно, один из них будет вынужден ждать, пока другой не завершит его использование.

Так что в случае Oracle это может быть безопасно, но одновременный доступ будет страдать от узкого места.

У нас было исключение ArrayOutOfBoundsException в кеше операторов Websphere его источника данных в пуле, и нам пришлось отключить этот кеш.

У нас было лечение, которое блокировало само себя.

Все это из-за текущего доступа к соединению, поэтому вывод из реальной практики таков: вы не должны этого делать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top