2015-02-04 3 views
0

ExecutorService (15 개 스레드)를 사용하여 다중 스레드 된 Java 프로세스가 있습니다. 각 스레드는 테이블에 데이터를 삽입하는 저장 프로 시저를 호출하고, 동시에 테이블에 여러 커밋을 볼 수 있도록 내 연결을 15 개의 스레드에 풀링 할 수 있지만 하나의 활성 스레드에 대해서도 설정된 15 개의 스레드 만 볼 수 있습니다. 준비 하 고 기다리고. 다중 스레드 Java 프로그램의 연결 풀링

연결을 설정하기 위해 아래의 코드를 사용하여 시도 및 풀링 모든 스레드

Class.forName(DB_DRIVER); 

DataSource oracleDataSource = new DriverManagerDataSource(DB_CONNECTION, DB_USER,DB_PASSWORD); 

ObjectPool objectPool = new GenericObjectPool(); 

DataSourceConnectionFactory datasourceConnectionFactory = new DataSourceConnectionFactory(oracleDataSource); 

PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(datasourceConnectionFactory, objectPool, null, null, false, true); 

objectPool.setFactory(poolableConnectionFactory); 

PoolingDataSource datasource = new PoolingDataSource(objectPool); 

에 걸쳐하지만 여전히 작동하지 않았다. 여전히 내 스레드는 하나의 연결 만 사용하고 다른 스레드는 활성 스레드가 완료되기를 기다리고 있습니다.

답변

1

클래스의 DB 연결을 캡슐화하고이 클래스의 개체 풀을 직접 만들 수 있습니다.

class Connection { 
// your DB connection specific stuff 
public void open() { 
// open connection 
} 

public void close() { 
// close connection 
} 

public void isOpen() { 
// is the connection being opened by any thread already 
} 
} 

이가 있으면, 어떤 요청 스레드에 사용 가능한 다음 연결 개체를 반환하는 스레드 안전한 방법을 만들 수 있습니다.

class ConnectionController { 
public Connection getConnection() { 
// return the next available connection object by checking which 
//connection object is not open by checking return value of isOpen 
} 
} 

완료되면 연결을 종료하십시오! 도움이 되길 바랍니다.

+0

연결 개체 풀을 말할 때 좀 더 자세히 설명해 주시겠습니까? – user3723562