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));
}