2.5.5-回调
优质
小牛编辑
132浏览
2023-12-01
CallBack、Hook
需求
实现一个 ThreadPool 类,该类能实现以下功能:
- 指定线程值的种类 在该类中定义多个静态内部类,比如 Cached,Fixed 等等,在类中定义 execute()、submit()方法。
- 执行 execute(Runnable r) 方法 定义 get
- 执行 submit(Callable) 方法
- 执行 getResult 方法获取线程执行的结果
好处:线程池的集中管理,多次复用。 回调再被调用方使用接口方法,在调用方实现该接口的方法。
将 Hbase 中的数据写入 MySQL
/**
* hbase表ResultScanner扫描循环回调函数
*/
public static interface ScanCallback {
void dealWith(Result result);
}
public static void findByRowkey(String tablename, List<String> rowkey, ScanCallback callback) throws IOException {
long start = System.currentTimeMillis();
HTableInterface htable = null;
int count = 0;
try {
htable = HBasePool.getHTable(tablename);
List<Get> gls = new ArrayList<Get>();
for (String r : rowkey) {
Get g = new Get(Bytes.toBytes(r));
gls.add(g);
}
Result[] rsList = htable.get(gls);
if(rsList!=null && rsList.length>0){
count++;
for (Result result : rsList) {
callback.dealWith(result);
}
}
} catch (IOException e) {
_logger.error(e.getMessage(), e);
throw e;
} finally {
closeHTable(htable);
}
_logger.info("findByRowkey() | table:{} count:{} millis:{}",tablename,count,(System.currentTimeMillis()-start));
}