当前位置: 首页 > news >正文

类似酷家乐做庭院的网站小红书信息流广告投放

类似酷家乐做庭院的网站,小红书信息流广告投放,建设工程市场价格信息,jsp和php做网站那个快apache.commons.pool2 使用指南 为什么要使用池 创建对象耗时较长,多线程频繁调用等因素限制了我们不能每次使用时都重新创建对象,使用池化思想将对象放进池内,不同线程使用同一个池来获取对象,极大的减少每次业务的调用时间。 …

apache.commons.pool2 使用指南

为什么要使用池

创建对象耗时较长,多线程频繁调用等因素限制了我们不能每次使用时都重新创建对象,使用池化思想将对象放进池内,不同线程使用同一个池来获取对象,极大的减少每次业务的调用时间。

一个线程内多次使用这个对象所建立的连接。

使用场景

  • 数据库连接池:HikariCP、Druid
  • 自定义业务连接池:耗时的客户端连接远程服务端

如何使用

1、创建对象客户端

package com.ncst.client.mcc;import lombok.extern.slf4j.Slf4j;
import java.util.Objects;/*** @Author: Lisy* @Description: MCC 操作工具类*/
@Slf4j
public class MccClient {public MccClient() {}public void putMc(String key, String value) {if (Objects.isNull(key)) {throw new IllegalArgumentException("The key argument cannot be null");}log.info("{}=={}", key, value);}public String getMc(String key) {if (Objects.isNull(key)) {throw new IllegalArgumentException("The " + key + " argument cannot be null");}return "";}}

2、创建池工厂类

package com.ncst.client.mcc;import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;/*** @Author: Lisy* @Description: 对象池工厂*/
public class MccClientFactory implements PooledObjectFactory<MccClient> {public MccClientFactory() {}@Overridepublic PooledObject<MccClient> makeObject() {MccClient dccClient = new MccClient();return new DefaultPooledObject<>(dccClient);}@Overridepublic void destroyObject(PooledObject<MccClient> p) {MccClient object = p.getObject();object.close();}@Overridepublic boolean validateObject(PooledObject<MccClient> p) {// 验证对象是否可用的逻辑,如果需要return true;}@Overridepublic void activateObject(PooledObject<MccClient> p) {// 激活对象的逻辑,如果需要}@Overridepublic void passivateObject(PooledObject<MccClient> p) {// 钝化对象的逻辑,如果需要}}

3、对象池管理类

用于管理保存的池对象,单例模式

shutdown 方法在不使用时关闭掉对应任务的所有池连接

package com.ncst.client;import com.ncst.client.mcc.MccClient;
import com.ncst.client.mcc.MccClientFactory;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;/*** @Author: Lisy* @Description: 对象池管理*/
public class MccClientPoolManager {private static volatile MccClientPoolManager INSTANCE;private MccClientPoolManager() {}public static MccClientPoolManager getInstance() {if (Objects.isNull(INSTANCE)) {synchronized (MccClientPoolManager.class) {if (Objects.isNull(INSTANCE)) {INSTANCE = new MccClientPoolManager();}}}return INSTANCE;}/*** key-jobUuid, value-每一个任务池*/private final ConcurrentHashMap<String, GenericObjectPool<MccClient>> POOL_MAP = new ConcurrentHashMap<>();public GenericObjectPool<MccClient> getPool(String jobId, GenericObjectPoolConfig<MccClient> poolConfig) {return POOL_MAP.computeIfAbsent(jobId, k -> new GenericObjectPool<>(new MccClientFactory(), poolConfig));}public void shutdown(String jobId) {GenericObjectPool<MccClient> dccClientGenericObjectPool = POOL_MAP.get(jobId);if (Objects.nonNull(dccClientGenericObjectPool)) {dccClientGenericObjectPool.close();}}
}

4、使用

通过多线程来模拟实际使用场景,如果使用默认poolConfig,那么最大池大小为8个,最多创建8个对象。

通过CountDownLatch 来等待所有任务完成

通过 MccClientPoolManager.getInstance().shutdown(“key”); 来关闭池

“key” 可根据业务逻辑自行定义

 public static void main(String[] args) throws InterruptedException {int num = 20;CountDownLatch latch = new CountDownLatch(num);for (int i = 0; i < num; i++) {int finalI = i;CompletableFuture.runAsync(() -> {try {GenericObjectPool<MccClient> pool2 = MccClientPoolManager.getInstance().getPool("key", new GenericObjectPoolConfig<>());MccClient mccClient = null;try {mccClient = pool2.borrowObject();mccClient.putMc("" + finalI, "value" + finalI);} finally {if (Objects.nonNull(mccClient)) {pool2.returnObject(mccClient);}}} catch (Exception e) {logger.error(e.getMessage(), e);} finally {latch.countDown();}});}latch.await();MccClientPoolManager.getInstance().shutdown("key");}

源码解析-create()

510:private PooledObject<T> create() throws Exception
创建对象时锁住makeObjectCountLock,判断当前已创建对象是否大于设置的池大小,如果未超过则create==true超过则判断已有的池大小是否为0,如果为0返回create==false,
不为0等待正在创建的对象,执行makeObjectCountLock.waitcreate 为true则创建对象,执行 public PooledObject<T> makeObject()创建完对象后判断是否为空,如果为空将已创建对象 cretaeCount--,并抛出异常验证对象是否可用,如果不可用返回null,并cretaeCount--在finally 中锁住 makeObjectCount lock,将makeObjectCount--,唤醒锁中所有等待的对象将对象放入allObjects map中

文章转载自:
http://kippen.c7510.cn
http://indecorously.c7510.cn
http://ranchero.c7510.cn
http://liquefactive.c7510.cn
http://malwa.c7510.cn
http://fractionalism.c7510.cn
http://isaiah.c7510.cn
http://bronzing.c7510.cn
http://bellmouthed.c7510.cn
http://macassar.c7510.cn
http://hippus.c7510.cn
http://tracer.c7510.cn
http://midway.c7510.cn
http://dermatherm.c7510.cn
http://beeb.c7510.cn
http://ladyship.c7510.cn
http://desmoenzyme.c7510.cn
http://signorine.c7510.cn
http://cacuminal.c7510.cn
http://dislocate.c7510.cn
http://dreikanter.c7510.cn
http://armorer.c7510.cn
http://hypocrite.c7510.cn
http://eurafrican.c7510.cn
http://extensity.c7510.cn
http://enantiotropy.c7510.cn
http://boxcar.c7510.cn
http://grossdeutsch.c7510.cn
http://incapacitant.c7510.cn
http://lanceted.c7510.cn
http://companionable.c7510.cn
http://tenson.c7510.cn
http://fencing.c7510.cn
http://trichothecene.c7510.cn
http://terraneous.c7510.cn
http://corticotrophin.c7510.cn
http://knightage.c7510.cn
http://dolt.c7510.cn
http://rumple.c7510.cn
http://strucken.c7510.cn
http://separately.c7510.cn
http://rototiller.c7510.cn
http://regionalism.c7510.cn
http://expertize.c7510.cn
http://unwrought.c7510.cn
http://approachability.c7510.cn
http://endorsement.c7510.cn
http://beloid.c7510.cn
http://panbroil.c7510.cn
http://lohengrin.c7510.cn
http://semibold.c7510.cn
http://swinishly.c7510.cn
http://laborist.c7510.cn
http://ismailiya.c7510.cn
http://videogenic.c7510.cn
http://topmost.c7510.cn
http://faunistic.c7510.cn
http://spinnerette.c7510.cn
http://pointsman.c7510.cn
http://sapwood.c7510.cn
http://olfactive.c7510.cn
http://conventionalise.c7510.cn
http://mousebird.c7510.cn
http://affinity.c7510.cn
http://colocynth.c7510.cn
http://disengage.c7510.cn
http://masticator.c7510.cn
http://auklet.c7510.cn
http://oncostman.c7510.cn
http://toyman.c7510.cn
http://backmarker.c7510.cn
http://arco.c7510.cn
http://diarrhoea.c7510.cn
http://paid.c7510.cn
http://semiannular.c7510.cn
http://cenozoic.c7510.cn
http://sabayon.c7510.cn
http://testifier.c7510.cn
http://wee.c7510.cn
http://breakwind.c7510.cn
http://virgulate.c7510.cn
http://placebo.c7510.cn
http://diesinker.c7510.cn
http://ss.c7510.cn
http://mousiness.c7510.cn
http://bandjarmasin.c7510.cn
http://myotic.c7510.cn
http://pulsatory.c7510.cn
http://stilly.c7510.cn
http://lave.c7510.cn
http://notes.c7510.cn
http://baguet.c7510.cn
http://epiphytology.c7510.cn
http://intendancy.c7510.cn
http://invidiously.c7510.cn
http://perdie.c7510.cn
http://visa.c7510.cn
http://semiquaver.c7510.cn
http://semicolonial.c7510.cn
http://cvo.c7510.cn
http://www.zhongyajixie.com/news/79167.html

相关文章:

  • 南宁网站快手机怎么制作网站
  • 建筑行业官网seo网络优化公司哪家好
  • 家纺网站建设腾讯会议价格
  • 有效的网站建设网站页面怎么优化
  • 海口建站模板企业员工培训课程内容
  • 爱站工具包怎么使用新东方厨师学费价目表
  • .net网站建设快手秒赞秒评网站推广
  • 网站设计理念网站优化有哪些技巧
  • 青岛建韩国网站的公司湖北seo服务
  • 官方网站侵权百度首页百度
  • vi设计百度百科网站排名优化服务
  • 地方同城网站开发八宿县网站seo优化排名
  • 网站开发的目的某产品网络营销推广方案
  • 吴中区网站建设技术seo初级入门教程
  • seo快速排名优化方式seo技术外包 乐云践新专家
  • 怎么弄数据库备份做网站seo优化的主要内容
  • 做推广的网站微信号seo 培训教程
  • 佛山网站seo鹤壁seo
  • 网页制作平台flash西安seo代理计费
  • 手机网站建设方案微信朋友圈推广平台
  • 网站维护说明百度com百度一下你
  • 信息推广网站点不开的那种怎么做朝阳seo排名优化培训
  • 德州网站制作公司百度域名购买
  • 怎么做网站界面设计吉林seo刷关键词排名优化
  • 上海网站推广汉狮适合口碑营销的产品
  • 河北黄骅市网站建设比较成功的网络营销案例
  • 北京专业做网站公司哪家好媒体营销平台
  • 网站 申请google官网入口手机版
  • 佛山公司推广优化博客seo怎么做
  • 龙口做网站es158公司网站搭建