Pergunta

Para reformular a pergunta: devo evitar o compartilhamento de instâncias de classes que implementam java.sql.Connection entre threads diferentes?

Foi útil?

Solução

Se o driver JDBC for compatível com especificações, tecnicamente sim, o objeto é seguro para o fio, mas você deve evitar o compartilhamento de conexões entre os threads, pois a atividade na conexão significa que apenas um tópico poderá fazer qualquer coisa de cada vez .

Você deve usar um pool de conexão (como Apache Commons DBCP) para garantir que cada thread obtenha sua própria conexão.

Outras dicas

java.sql.Connection é uma interface. Portanto, tudo depende da implementação do driver, mas, em geral, você deve evitar compartilhar a mesma conexão entre diferentes encadeamentos e usar pools de conexão. Também é recomendável ter um número de conexões no pool superior ao número de threads de trabalhador.

Este é um tópico antigo, mas para aqueles que procuram uma resposta sobre o Microsoft SQL Server, aqui está a resposta:

O SQLServerConnection não é seguro, no entanto, várias instruções criadas a partir de uma única conexão podem estar processando simultaneamente em threads simultâneos.

e

O SQLServerConnection implementa uma conexão JDBC ao SQL Server.

De todas as opções acima, você pode compartilhar declarações, mas não conexões e, caso precise de uma conexão em cada thread, poderá usar um pool de threads.

Consulte Mais informação aqui

Oráculo JDBC e multithreading documentos:

Como todos os métodos da API do Oracle JDBC são sincronizados, se dois threads tentarem usar o objeto de conexão simultaneamente, um será forçado a esperar até que o outro termine seu uso.

Portanto, pode ser seguro no caso Oracle, mas o acesso simultâneo sofreria com gargalos.

Tínhamos ArrayoutOfBoundSexception no cache do WebSphere Declaração de seu pooledDataSource, e tivemos que desativar esse cache.

Tivemos um tratamento que estava bloqueando.

Tudo isso devido ao acesso atual à conexão; portanto, a conclusão da prática da vida real é que você não deve fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top