# cj.studio.util.reactor **Repository Path**: carocean/cj.studio.util.reactor ## Basic Information - **Project Name**: cj.studio.util.reactor - **Description**: reactor 响应试 多路复用 并发更新余额 大并发 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-05-13 - **Last Updated**: 2021-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # reactor ## 多路复用器 原理:对于一个管道,永远处在同一个线程之下,而多个管道在不同时段可共用同一线程。因此为多路复用 - 提升高并发处理性能 - 适合并发余额等的更新,保证一致性.每个pipeline下按序执行,不同pipeline之间并发执行 - 可用于并发余额的列新,将一批并发余额指标按key归并,而后一个key对应一个pipeline ## 用法 package cj.studio.util.reactor.test; import cj.studio.util.reactor.DefaultReactor; import cj.studio.util.reactor.Event; import cj.studio.util.reactor.IPipeline; import cj.studio.util.reactor.IPipelineCombination; import cj.studio.util.reactor.IReactor; import cj.studio.util.reactor.IValve; import cj.studio.util.reactor.Reactor; public class TestMain { public static void main(String[] args) { IPipelineCombination combin = new IPipelineCombination() { @Override public void combine(IPipeline pipeline) { IValve valve = new IValve() { @Override public void flow(Event e, IPipeline pipeline) { System.out.println("----进入线程:"+pipeline.key()+" "+Thread.currentThread().getId()+" "+e.getCmd()+" "+this.hashCode()); switch (e.getCmd()) { case "deposit": break; case "cashout": break; } pipeline.nextFlow(e, this); System.out.println("----退出线程:"+pipeline.key()+" "+Thread.currentThread().getId()+" "+e.getCmd()+" "+this.hashCode()); } }; pipeline.append(valve); } }; IReactor reactor = Reactor.open(DefaultReactor.class, 10, 1000, combin); try { Thread.sleep(1000L); } catch (InterruptedException e1) { e1.printStackTrace(); } int keyCount=10;//pipeline数,每个pipeline下按序执行,不同pipeline之间并发执行 String[] keys=new String[keyCount]; for(int i=0;i