gpt4 book ai didi

java - 多线程Java程序中的连接池

转载 作者:行者123 更新时间:2023-12-01 11:57:27 26 4
gpt4 key购买 nike

我有一个使用 ExecutorService 的多线程 java 进程(15 个线程)。每个线程调用存储过程将数据插入到表中,我的连接将跨 15 个线程进行池化,以便我可以同时看到表上的多个提交,但即使在 15 个线程中,我也只看到为一个 Activity 线程建立的一个连接准备就绪,等待。

尝试使用以下代码建立连接并跨所有线程进行池化

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);

但它仍然不起作用。我的线程仍然只使用一个连接,其他线程正在等待 Activity 连接完成。

最佳答案

您可以将与数据库的连接封装在一个类中,并自己创建该类的对象池。

示例

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
}
}

完成后请务必关闭连接!希望对您有所帮助。

关于java - 多线程Java程序中的连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28326060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com