如何使用CountDownLatch和CyclicBarrier实现线程同步步调?

2026-05-27 13:180阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2195个文字,预计阅读时间需要9分钟。

如何使用CountDownLatch和CyclicBarrier实现线程同步步调?

示例:账户系统的业务流程是这样的,用户通过在线商城下单,会生成电子订单,并保存在订单库;随后物流会生成派送单给用户发货,派送单也会保存在派送单库。为了防止漏发或重复派发。

案例:对账系统的业务是这样的,用户通过在线商城下单,会生成电子订单,保存在订单库;之后物流会生成派送单给用户发货,派送单保存在派送单库。为了防止漏派送或者重复派送,对账系统每天还会校验是否存在异常订单。对账系统的处理逻辑很简单,系统流程图如下。目前对账系统的处理逻辑是首先查询订单,然后查询派送单,之后对比订单和派送单,将差异写入差异库。

对上面的代码抽象就是这样的,就是在一个单线程里面循环查询订单、派送单,然后执行对账,最后将写入差异库。

while(存在未对账订单){
// 查询未对账订单
pos = getPOrders();
// 查询派送单
dos = getDOrders();
// 执行对账操作
diff = check(pos, dos);
// 差异写入差异库
save(diff);
}

1)上面的系统现在执行很慢,该怎样优化来执行速度呢?

  • 目前是单线程的,那单线程的话我们就考虑是否可以用多线程来做。查询未对账订单和查询派送单这两个操作是可以并行处理的。

阅读全文

本文共计2195个文字,预计阅读时间需要9分钟。

如何使用CountDownLatch和CyclicBarrier实现线程同步步调?

示例:账户系统的业务流程是这样的,用户通过在线商城下单,会生成电子订单,并保存在订单库;随后物流会生成派送单给用户发货,派送单也会保存在派送单库。为了防止漏发或重复派发。

案例:对账系统的业务是这样的,用户通过在线商城下单,会生成电子订单,保存在订单库;之后物流会生成派送单给用户发货,派送单保存在派送单库。为了防止漏派送或者重复派送,对账系统每天还会校验是否存在异常订单。对账系统的处理逻辑很简单,系统流程图如下。目前对账系统的处理逻辑是首先查询订单,然后查询派送单,之后对比订单和派送单,将差异写入差异库。

对上面的代码抽象就是这样的,就是在一个单线程里面循环查询订单、派送单,然后执行对账,最后将写入差异库。

while(存在未对账订单){
// 查询未对账订单
pos = getPOrders();
// 查询派送单
dos = getDOrders();
// 执行对账操作
diff = check(pos, dos);
// 差异写入差异库
save(diff);
}

1)上面的系统现在执行很慢,该怎样优化来执行速度呢?

  • 目前是单线程的,那单线程的话我们就考虑是否可以用多线程来做。查询未对账订单和查询派送单这两个操作是可以并行处理的。

阅读全文