CountDownLatch latch = new CountDownLatch(3);
try {
//多线程调用
ThreadUtil.execAsync(new Runnable() {
@Override
public void run() {
latch.countDown();
}
});
//多线程调用
ThreadUtil.execAsync(new Runnable() {
@Override
public void run() {
latch.countDown();
}
});
//多线程调用
ThreadUtil.execAsync(new Runnable() {
@Override
public void run() {
latch.countDown();
}
});
latch.await();
}catch (Exception e) {
e.printStackTrace();
ro.err(e.getMessage());
}
final CountDownLatch latch = new CountDownLatch(threadNum);
Connection conn = null;
try {
//查询出所有的数据
handleList(list, threadNum, conn, latch);
latch.await();
} catch (Exception e) {
e.printStackTrace();
}
/**
* @param list
* @param threadNum 线程数
* @多线程拆封list
*/
public synchronized void handleList(List<Map<String, Object>> list, int threadNum, Connection conn, CountDownLatch latch ) {
//获取数据的长度
int length = list.size();
int everySize = length % threadNum == 0 ? length / threadNum : (length / threadNum + 1);
for (int i = 0; i < threadNum; i++) {
int end = length < (i + 1) * everySize ? length : (i + 1) * everySize;
Thread thread = new Thread(new HandleThread("【线程" + (i + 1) + "】", list, i * everySize, end > length ? length : end, conn, latch));
thread.start();
}
}
class HandleThread implements Runnable {
private String threadName;
private List<Map<String, Object>> data;
private int start;
private int end;
private Connection conn;
private CountDownLatch latch;
private List<String> depData;
public HandleThread(String threadName, List<Map<String, Object>> data, int start, int end, Connection conn, CountDownLatch latch) {
this.threadName = threadName;
this.data = data;
this.start = start;
this.end = end;
this.conn = conn;
this.latch = latch;
}
@Override
public void run() {
try {
if (start < end) {
List<Map<String, Object>> subList = data.subList(start, end);
System.out.println(threadName + "执行,执行list长度" + subList.size());
//处理逻辑
}
// conn.commit();
} catch (Exception e) {
e.printStackTrace();
throw new BPMNError("500", e.getMessage());
} finally {
latch.countDown();
System.out.println("剩余final:" + latch.getCount());
}
}
}