문제

표준 MySQL JDBC 드라이버 스레드-안전입니까? 특히 모든 스레드에서 단일 연결을 사용하고 싶지만 각 문은 단일 스레드에서만 사용됩니다. 안전한 특정 시나리오와 그렇지 않은 다른 시나리오가 있습니까? 여기서 당신의 경험은 무엇입니까?

도움이 되었습니까?

해결책

연결 당 트랜잭션이 시작 / 커밋됩니다. 당신이 매우 구체적인 일을하지 않는 한 (솔직히 정당화 될 예정인 예를 생각할 수는 없습니다), 당신은 연결 풀과 스레드 당 연결이 더 좋습니다.

다른 팁

AutoCommit = 1 인 경우 연결에 대한 액세스가 동기화 된 경우 여러 스레드가 동일한 연결을 공유하는 것이 매우 가능합니다. AutoCommit = 0이면 커밋이 발생할 때까지 어떤 종류의 뮤텍스를 통해 연결에 대한 액세스를 제어해야합니다.

응용 프로그램이 가질 수있는 연결량이 절대적으로 제한되지 않는 한 연결 풀은보다 실행 가능한 대안이 될 수 있습니다.

최근 경험을 바탕으로 Connection 커넥터/j 5.1.33에서 객체는 스레드 안전하지 않습니다.

나는 설명 된 교착 상태에 빠졌다 버그 67760. 그것이 버그인지 확실하지 않지만 토론의 합리적인 조언은 다음과 같습니다.

2012 년 12 월 12 일 20:33] 토드 농부

올바른 동기화없이 여러 스레드에서 단일 연결 객체를 사용하지 마십시오. Connector/J- 및 더 중요한 것은 MySQL 클라이언트 - 서버 프로토콜은 동일한 연결 객체를 사용하여 동시 작업을 허용하지 않습니다. 연결 객체를 스레드에서 공유 해야하는 경우 작업이 올바르게 직렬화되도록 애플리케이션 코드 작성자의 책임입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top