我有一个使用ExecutorService(15个线程)进行多线程的java进程。每个线程都调用存储过程将数据插入到表中,我的连接要汇总到15个线程,以便我可以同时在表上看到多个提交,但我只看到为一个活动线程建立了一个连接,即使是15个线程也是如此准备好等待。
尝试使用以下代码建立连接并汇集所有线程
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);
但它还没有奏效。我的线程仍然只使用一个连接,其他线程正在等待活动的线程完成。
答案 0 :(得分: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
}
}
确保在完成后关闭连接! 希望它有所帮助。