pool(一)——入门

本文介绍Apache Commons Pool2包中的ObjectPool接口及其在数据库连接池和Redis连接池中的应用。同时探讨线程池的工作原理,指出线程池通过阻塞队列实现线程重用,而与对象池的重用机制不同。
摘要由CSDN通过智能技术生成

这一系列主要说的是org.apache.commons.pool2包提供的ObjectPool以及对应的实现源码。

1.已有连接池举例

目前已知的对象池的应用,比如:

数据库连接池——org.apache.commons.dbcp2的BasicDataSource

jedis连接池——redis.clients.jedis的JedisPool。

2.线程池

线程池的用法和这个不太一样,因为线程的run方法执行完之后,一个线程的使命就结束了。所以如果要想重用线程,就需要阻止run方法的结束,用死循环等方法。目前jdk线程池使用的是结合LinkedBlockingQueue,通过队列的阻塞方法让当前线程休眠,等待任务并处理,实现单个线程的重用。

execute方法会添加一个worker。

public void execute(Runnable command) {
    if (workerCountOf(c) < corePoolSize) {
        if (addWorker(command, true))
    ...
}
private boolean addWorker(Runnable firstTask, boolean core) {
        ...
        Worker w = new Worker(firstTask);
        Thread t = w.thread;
        ...
        try {
            ...
            workers.add(w);
            ...
        } finally {
            mainLock.unlock();
        }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值