java工具类,开启线程并发处理list数据
最近在做推送相关的东西,使用umeng推送,在推送指定用户的时候,一条一条比较慢,写一个线程工具类,直接上代码
public class TencentThread extends Thread {
/**
* 多线程处理list
*
* @param data 数据list
* @param threadNum 线程数
*/
public synchronized void handleList(LinkedList<Map<String, Object>> data, int threadNum) {
try {
int length = data.size();
int tl = length % threadNum == 0 ? length / threadNum : (length / threadNum + 1);
CountDownLatch latch = new CountDownLatch(100);// 多少协作
for (int i = 0; i < threadNum; i++) {
int end = (i + 1) * tl;
if ((i * tl) <= length) {
HandleThread thread = new HandleThread(data, i * tl, end > length ? length : end, latch);
thread.start();
}
}
latch.await();// 等待所有工人完成工作
} catch (Exception e) {
e.printStackTrace();
}
}
class HandleThread extends Thread {
private List<Map<String, Object>> data;
private int start;
private int end;
private CountDownLatch latch;
public HandleThread(List<Map<String, Object>> data, int start, int end, CountDownLatch latch) {
this.data = data;
this.start = start;
this.end = end;
this.latch = latch;
}
@Override
public void run() {
List<Map<String, Object>> l = data.subList(start, end);
for (Map<String, Object> map : l) {
//数据处理
}
latch.countDown();// 工人完成工作,计数器减一
}
}
}
线程调用,开启是个线程同时处理
LinkedList<Map<String, Object>> list = new LinkedList<Map<String, Object>>();
TencentThread tencentThread = new TencentThread();
tencentThread.handleList(list, 10);