gpt4 book ai didi

java - 是否有关于如何使用 Java ObjectPool/池的任何好的教程或示例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:35 25 4
gpt4 key购买 nike

我正在尝试创建一个 channel /连接到队列服务器的池,并尝试使用 ObjectPool 但在 example 中使用它时遇到问题在他们的网站上。

到目前为止,我有一些线程可以正常工作,但我希望它们中的每一个都从池中获取一个 channel ,然后将其返回。我了解如何使用它 (borrowObject/returnObjects),但不确定如何创建初始池。

以下是在 rabbitmq 中创建 channel 的方式:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

我的代码只是使用 channel 来做事。我很困惑,因为我能找到的唯一例子(在他们的网站上)是这样开始的:

private ObjectPool<StringBuffer> pool;

public ReaderUtil(ObjectPool<StringBuffer> pool) {
this.pool = pool;
}

这对我来说没有意义。我意识到这对于建立数据库连接很常见,所以我试图找到使用数据库和 ObjectPool 的教程,但它们似乎使用了特定于数据库的 DBCP(而且我似乎无法使用我的队列服务器的逻辑)。

关于如何使用它有什么建议吗?或者是否有另一种方法用于 java 中的池?

最佳答案

他们创建了一个类,该类创建对象并知道返回对象时要做什么。这对你来说可能是这样的:

public class PoolConnectionFactory extends BasePoolableObjectFactory<Connection> { 

private final ConnectionFactory factory;
public PoolConnectionFactory() {
factory = new ConnectionFactory();
factory.setHost("localhost");
}

// for makeObject we'll simply return a new Connection
public Connection makeObject() {
return factory.newConnection();
}

// when an object is returned to the pool,
// we'll clear it out
public void passivateObject(Connection con) {
con.I_don't_know_what_to_do();
}

// for all other methods, the no-op
// implementation in BasePoolableObjectFactory
// will suffice
}

现在你创建一个 ObjectPool<Connection>某处:

ObjectPool<Connection> pool = new StackObjectPool<Connection>(new PoolConnectionFactory());

然后你可以使用pool在你的线程里面,比如

Connection c = pool.borrowObject();
c.doSomethingWithMe();
pool.returnObject(c);

对您来说没有意义的行是一种将池对象传递给不同类的方法。看最后一行,他们在创建读取器的同时创建了池。

new ReaderUtil(new StackObjectPool<StringBuffer>(new StringBufferFactory()))

关于java - 是否有关于如何使用 Java ObjectPool/池的任何好的教程或示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10368311/

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