业务场景:需要大批量处理数据,执行时间容易超时。
/**
* 主线程等待子线程执行完成再执行
*/
static int count = 0;
public static void main(String[] args) {
List list = new ArrayList();
list.add(2);
list.add(1);
list.add(2);
list.add(2);
List lists = new ArrayList();
List groups = generateListGroup(list, 20);
System.out.println(list.size() + "集合总数");
final CountDownLatch latch = new CountDownLatch(groups.size());
for (int i = 0; i < groups.size(); i++) {
final List<String> arrayList = (List<String>) groups.get(i);
//4个线程处理ping
new Thread(() -> {
System.out.println("线程");
for (int j = 0; j < arrayList.size(); j++) {
System.out.println("这是子线程");
System.out.println(list);
lists.add(list);
count++;
}
latch.countDown();
}).start();
}
try {
latch.await();
System.out.println(count + "总数");
System.out.println("这是主线程执行" + lists);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 处理集合分批存放
*
* @param list
* @param maxListSize
* @param <E>
* @return
*/
public static <E> List<List<E>> generateListGroup(List<E> list, int maxListSize) {
List<List<E>> listGroup = Lists.newArrayList();
if (CollectionUtils.isEmpty(list) || list.size() <= maxListSize) {
listGroup.add(list);
} else {
int pages = (int) Math.ceil((double) list.size() / (double) maxListSize);
for (int i = 0; i < pages; i++) {
int fromIndex = i * maxListSize;
int toIndex = (i + 1) * maxListSize > list.size() ? list.size()
: (i + 1) * maxListSize;
List<E> subList = list.subList(fromIndex, toIndex);
listGroup.add(subList);
}
}
return listGroup;
}