爱称:线程疯狂堵塞器
简介:简单,好用,好上手,就是能用的业务场景不多
ps:会堵塞我线程池挺多线程的 要是任务确实很重 要执行挺久 还是别用8
害 并发大师发明了那么多避免堵塞的锁 在这你给我全堵上了
image.png
//充满智慧的加一 给主线程一个机会
CyclicBarrier cyclicBarrier = new CyclicBarrier(task.size() + 1);
try {
taskList.forEach((k, v) -> {
synchronized (cyclicBarrier) {
threadPool.execute(() -> {
try {
//查询 or 干活
} catch (Exception e) {
//exception
} finally {
//防止任务中途出错 主线程一直等待
try {
//返回剩余次数 防止线程卡死
int remainingTimes = cyclicBarrier.await(20L, TimeUnit.SECONDS);
} catch (Exception e) {
//exception
}
//ps:遇到过线程不安全情况 计数出问题 //可以不通过finally 使用await(Long)超时停止
}
});
}
});
//超时时间 防止主线程卡死
cyclicBarrier.await(20L, TimeUnit.SECONDS);
//第二次执行任务
taskList.forEach((k, v) -> {
synchronized (cyclicBarrier) {
threadPool.execute(() -> {
try {
//查询 or 干活
} catch (Exception e) {
//exception
} finally {
//防止任务中途出错 主线程一直等待
try {
//剩余次数 防止线程卡死
int remainingTimes = cyclicBarrier.await(20L, TimeUnit.SECONDS);
} catch (Exception e) {
//exception
}
//ps:遇到过线程不安全情况 计数出问题 //可以不通过finally 使用await(Long)超时停止
}
});
}
});
//第二次解锁 主线程 超时时间 防止主线程卡死
cyclicBarrier.await(20L, TimeUnit.SECONDS);
网友评论