HTablePool的实现分析

HTablePool提供三种类型的实例池,包括Reusable、ThreadLocal和未使用的RoundRobin。默认使用Reusable,每个table对应一个ConcurrentLinkedQueue,多线程复用。HTablePool通过PooledHTable(HTable的Wrapper)管理实例,当尺寸超过最大值时,会弃用超出的实例。虽然HTable实例线程不安全,但HTablePool旨在减少实例化开销。PooledHTable的代码设计存在问题,可能存在多线程同步和阻塞的风险,使用时需谨慎。
摘要由CSDN通过智能技术生成

1)基本概念

HTablePool

  • ​3种类型
    • ​PoolType.Reusable(默认)一个实例池,多线程复用,内部是每个table一个ConcurrentLinkedQueue装多个实例
    • PoolType.ThreadLocal,很奇怪的实现,每个线程只能有一个实例,感觉在多线程的场景没有意义
    • PoolType.RoundRobin​(没有被使用,就算设置了该类型也没用,见HTablePool的构造函数)
  • PoolMap<String, HTableInterface> tables​:用于存放table实例,正如上面提到的默认是每个table对应一个ConcurrentLinkedQueue​
  • maxSize:pool的最大尺寸​

2)样例代码

public class HTablePoolTest {

	protected static String TEST_TABLE_NAME = "testtable";

	protected static String ROW1_STR = "row1";
	protected static String COLFAM1_STR = "colfam1";
	protected static String QUAL1_STR = "qual1";

	private final static byte[] ROW1 = Bytes.toBytes(ROW1_STR);
	private final st
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值