Sim, em geral, você precisa criar uma nova conexão para cada segmento. Você não tem controle sobre como o sistema operacional timeslices execução de threads (não obstante definir suas próprias seções críticas), para que você possa, inadvertidamente, ter vários segmentos tentando enviar dados para baixo que um tubo.
Observe o mesmo se aplica a quaisquer comunicações de rede. Se você tivesse dois segmentos tentando compartilhar um soquete com uma conexão HTTP, por exemplo.
- Thread 1 faz um pedido
- Thread 2 faz um pedido
- Thread 1 lê bytes da tomada, sem querer ler a resposta do pedido rosca 2 de
Se você envolveu todas as suas transações em seções críticas e, portanto, bloquear quaisquer outros tópicos para uma inteira begin / commit ciclo, então você pode ser capaz de compartilhar uma conexão de dados entre threads. Mas eu não faria isso, mesmo assim, a menos que você realmente tem conhecimento inato do protocolo JDBC.
Se a maioria dos seus segmentos têm necessidade infrequente para conexões de banco de dados (ou nenhuma necessidade em tudo), você pode ser capaz de designar um segmento para fazer o seu trabalho de banco de dados, e tem outros tópicos fila seus pedidos para que um fio. Isso reduziria a sobrecarga de tantas conexões. Mas você vai ter que descobrir como gerenciar conexões por fio em seu ambiente (ou outra pergunta específica sobre isso em StackOverflow).
update: Para responder a sua pergunta no comentário, a maioria das marcas de banco de dados não suportam várias transações simultâneas em uma única conexão (InterBase / Firebird é a única exceção que eu saiba).
Seria bom ter um objeto de transação separada, e para ser capaz de iniciar e cometer várias transações por ligação. Mas os vendedores simplesmente não apoiá-lo.
Da mesma forma, APIs padrão independente de fornecedor, como JDBC e ODBC fazer a mesma suposição, que o estado da transação é meramente uma propriedade do objeto de conexão.