2012-05-16 4 views
2

나는 멀티 스레딩 프로세스를 실행하는 응용 프로그램을 가지고 있습니다.
각 스레드에서 스레드를 실행하는 데 중요한 정보를 저장하는 mysql db와 동일한 연결을 공유합니다.java multithreading and mysql

보통 멀티 스레딩 할 때 동기화를 확인해야하므로 동일한 리소스를 동시에 공유하고 싶지만 mysql과 동일한 작업을 수행해야합니까?

나는 그것을 사용할 때 행을 잠그는 innodb를 사용하고 있으며, 내 코드에서도이 행에 대한 액세스를 볼 필요가 있는지 알지 못한다.

서버가 자체 연결을 관리하지만 다시는 확실하지 않기 때문에 내 이해가 중요하지 않습니다.

+4

이 주제를 다루는 여러 질문 중 하나를 이미 확인 했습니까? 예를 들면 다음과 같습니다. http://stackoverflow.com/questions/2167819/java-threads-and-mysql and http://stackoverflow.com/questions/1209693/is-mysql-connector-jdbc-thread-safe –

답변

1

Connection (을)를 스레드로부터 보호 할 수는 없습니다.

Mysql (및 특히 innodb)은 여러 연결을 안전하게 처리 할 수 ​​있습니다.

(Emil Vikström) 질문에 대한 답변에서 문제에 대한 해결책을 제안합니다.

(편집) 내가 인용 :

이미이 주제를 다루는 여러 질문 중 하나를 체크 아웃 적이 있습니까? 예 : Java Threads and MySQLIs MySQL Connector/JDBC thread safe? - Emil Vikström

+0

실제로 그 질문을 읽었지만 당신이 말했듯이, 논리적 인 문제에서 나는 공유 된 innodb에 연결을 사용할 때 발생할 수있는 문제가 무엇인지 이해하지 못합니다. 그리고 만약 내가 스레드간에 공유 간단한 연결을 사용하고 있습니다, 내가 그들을 동기화해야합니까? 또는 mysql이 그것들을 단독으로 사용하는 방법을 알고있다. –

+0

나는 그것을 직접 시도하지 않았지만, 1 개의 연결 객체를 사용하는 2 개의 스레드 이상은 정의되지 않은 결과를 줄 수있다. 이것은 기본 구현이 실제 연결 상태 (socket, resultSets 등)를 유지할 수 있기 때문입니다. 가장 좋은 방법은 연결 풀을 사용하거나 스레드 당 하나의 연결을 사용하거나 동일한 연결 사용을 동기화하는 것입니다. 그래서 질문에, 예 - 공유 연결을 동기화해야합니다. – henryabra

+0

스레드 당 새 연결을 열지 않아도 mysql 서버에 과부하가 걸릴 수 있습니까? –