문제

을 바꿔 질문:피해야 할 공유 클래스의 인스턴스를 구현하는 java.sql.Connection 다른 스레드가?

도움이 되었습니까?

해결책

JDBC 드라이버가 사양을 준수하는 경우 기술적으로 예, 객체는 스레드 안전이지만 스레드 간의 연결을 공유하지 않아야합니다. 연결의 활동은 하나의 스레드 만 한 번에 한 번에 무엇이든 할 수 있음을 의미합니다. .

연결 풀을 사용해야합니다 (예 : 아파치 커먼즈 DBCP) 각 스레드가 자체 연결을 받도록합니다.

다른 팁

java.sql.connection은 인터페이스입니다. 따라서 모두 운전자의 구현에 따라 다르지만 일반적으로 다른 스레드간에 동일한 연결을 공유하고 연결 풀을 사용하지 않아야합니다. 또한 수영장에서 작업자 스레드 수보다 높은 수의 연결을하는 것이 좋습니다.

이것은 오히려 오래된 스레드,하지만 사람들을 위해 찾고 응답에 대한 Microsoft SQL Server,여기에는 대답:

SQLServerConnection 지 않는 스레드에 안전하고,그러나 여러 문을 만들어에서 하나의 연결을 처리할 수 있습을 동시에 동시에 실이다.

SQLServerConnection 구현 JDBC 연결하여 있음을 의미합니다.

에서 위의 모든,당신을 공유할 수 있 문 하지만 연결,그리고 필요한 경우 연결에서 각 스레드를 사용할 수 있습니다 스레드 수영장도 있습니다.

자세히보기

신탁 JDBC 및 멀티 스레딩 문서 :

모든 Oracle JDBC API 메소드가 동기화되기 때문에 두 스레드가 연결 객체를 동시에 사용하려고하면 하나는 다른 하나가 사용을 완료 할 때까지 기다려야합니다.

따라서 오라클 케이스에서는 안전 할 수 있지만 동시 액세스는 병목 현상으로 어려움을 겪을 것입니다.

WebSphere 명령문 캐시에 대한 ArrayoutOfBoundSexception이 PooledDataSource의 Cache를 사용했으며 해당 캐시를 비활성화해야했습니다.

우리는 스스로를 막고있는 치료를 받았습니다.

이 모든 것은 연결에 대한 현재 액세스로 인해 실제 관행에 의한 결론은 그렇게해서는 안된다는 것입니다.

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