@Override public Boolean call() throws Exception { List<Future<Boolean>> futureList = new ArrayList<>(); List<Get> getList = new ArrayList<>(Constant.BATCH_GROUP_SIZE); int count = 0; for (Get get : gets) { getList.add(get); if (count % Constant.BATCH_GROUP_SIZE == 0) { Future<Boolean> f = AsyncThreadPoolFactory.ASYNC_HBASE_THREAD_POOL.submit(new GetTask(getList, result)); futureList.add(f); getList = new ArrayList<>(Constant.BATCH_GROUP_SIZE); } count++; } Future<Boolean> f = AsyncThreadPoolFactory.ASYNC_HBASE_THREAD_POOL.submit(new GetTask(getList, result)); futureList.add(f); boolean isOk = false; for (Future<Boolean> future : futureList) { try { isOk = future.get(500, TimeUnit.MILLISECONDS); } catch (TimeoutException ignored) { } catch (Exception e) { e.printStackTrace(); } finally { if (!isOk) { future.cancel(Boolean.FALSE); } } } return isOk; }
@Override public Map<String, Map<String, String>> batch(List<GetItem> getItems) { Map<String, Map<String, String>> result = new ConcurrentHashMap<>(); List<Get> gets = new ArrayList<>(getItems.size()); for (GetItem getItem : getItems) { Get g = new Get(getItem.getRowkey()); g.addFamily(getItem.getFamily()); gets.add(g); } GetGroupTask task = new GetGroupTask(gets, result); Future<Boolean> future = AsyncThreadPoolFactory.ASYNC_HBASE_THREAD_POOL.submit(task); Boolean r = Boolean.FALSE; try { r = future.get(500, TimeUnit.MILLISECONDS); } catch (TimeoutException ignored) { } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } if (!r) { future.cancel(Boolean.FALSE); } return result; }