网站搭建与网站建设,网站如何选择服务器,建设平面设计工作室网站方案,网站开发与维护工资多少用 CyclicBarrier 实现线程同步
线程 T1 和 T2 要做到步调一致#xff0c;都完成后通知到线程 T3 创建了一个计数器初始值为 2 的 CyclicBarrier#xff0c;你需要注意的是创建 CyclicBarrier 的时候#xff0c;我们还传入了一个回调函数#xff0c;当计数器减到 0 的时候… 用 CyclicBarrier 实现线程同步
线程 T1 和 T2 要做到步调一致都完成后通知到线程 T3 创建了一个计数器初始值为 2 的 CyclicBarrier你需要注意的是创建 CyclicBarrier 的时候我们还传入了一个回调函数当计数器减到 0 的时候会调用这个回调函数。 CyclicBarrier 的计数器有自动重置的功能当减到 0 的时候会自动重置你设置的初始值。
// 订单队列
VectorP pos;
// 派送单队列
VectorD dos;
// 执行回调的线程池
Executor executor Executors.newFixedThreadPool(1);
final CyclicBarrier barrier new CyclicBarrier(2, ()-{executor.execute(()-check());});void check(){P p pos.remove(0);D d dos.remove(0);// 执行对账操作diff check(p, d);// 差异写入差异库save(diff);
}void checkAll(){// 循环查询订单库Thread T1 new Thread(()-{while(存在未对账订单){// 查询订单库pos.add(getPOrders());// 等待barrier.await();}});T1.start(); // 循环查询运单库Thread T2 new Thread(()-{while(存在未对账订单){// 查询运单库dos.add(getDOrders());// 等待barrier.await();}});T2.start();
}