Является ли java.sql.Connection потоком безопасным?

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

Это скорее старый поток, но для тех, кто ищет ответ в отношении Microsoft SQL Server, вот ответ:

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

а также

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

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

Подробнее здесь

Ответ 4

Oracle JDBC и многопоточные документы:

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

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

Ответ 5

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

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

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