code

java.sql.Connection 스레드는 안전합니까?

codestyles 2020. 12. 5. 09:46
반응형

java.sql.Connection 스레드는 안전합니까?


질문을 바꾸려면 : java.sql.Connection서로 다른 스레드간에 구현 되는 클래스의 인스턴스를 공유하지 않아야 합니까?


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

연결 풀 (예 : Apache Commons DBCP )을 사용하여 각 스레드가 자체 연결을 얻도록해야합니다.


java.sql.Connection은 인터페이스입니다. 따라서 모든 것은 드라이버의 구현에 따라 다르지만 일반적으로 서로 다른 스레드간에 동일한 연결을 공유하지 말고 연결 풀을 사용해야합니다. 또한 작업자 스레드 수보다 많은 수의 연결을 풀에 포함하는 것이 좋습니다.


이것은 다소 오래된 스레드이지만 Microsoft SQL Server에 대한 답변을 찾고있는 사람들을위한 답변은 다음과 같습니다.

SQLServerConnection은 스레드로부터 안전하지 않지만 단일 연결에서 생성 된 여러 문은 동시 스레드에서 동시에 처리 될 수 있습니다.

SQLServerConnection은 SQL Server에 대한 JDBC 연결을 구현합니다.

위의 모든 것에서 연결이 아닌 문을 공유 할 수 있으며 각 스레드에서 연결이 필요한 경우 스레드 풀을 사용할 수 있습니다.

여기에서 더 많은 것을 읽으 십시오


Oracle JDBC 및 멀티 스레딩 문서 :

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

따라서 Oracle의 경우 안전 할 수 있지만 동시 액세스에는 병목 현상이 발생합니다.


풀링 된 데이터 소스의 Websphere 문 캐시에 ArrayOutOfBoundsException이 있었고 해당 캐시를 비활성화해야했습니다.

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

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

참고 URL : https://stackoverflow.com/questions/1531073/is-java-sql-connection-thread-safe

반응형