# flequeue **Repository Path**: mySpaceHome_tonly_pam/flequeue ## Basic Information - **Project Name**: flequeue - **Description**: 🚀一个高性能并发队列,在有限的数组容器中进行,多生产者多消费者协同并发。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-09-02 - **Last Updated**: 2024-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java ## README # FLEQUEUE 一个简单的队列的小小的实现,灵感来自于Disruptor。 此项目规格(单位:行):总528,源码260,注释202,略... ## 使用教程 ```java import com.uhu.flequeue.Flequeue; import com.uhu.flequeue.operation.ElementConsumer; import com.uhu.flequeue.operation.ElementProducer; public class Guide { public static void main(String[] args) { final long startTime = System.currentTimeMillis(); // 1.创建消费者,一个或者多个 ElementConsumer consumer = (sequence, element) -> System.out.println( Thread.currentThread().getName() + "消费了序号为" + sequence + "的元素" + element + "花费" + (System.currentTimeMillis() - startTime) + "ms"); ElementConsumer consumerCopier = consumer; // 2.创建队列,获取生产者 ElementProducer elementProducer = // 创建队列构造者,指定容器大小 new Flequeue(512) // 设置消费者组,组中存在多个消费者串行 .consumerGroup(consumer, consumerCopier) // 指定消费者并发个数,不设置则默认为消费组中成员数 // .concurrent(2) // 设置消费者组的线程工厂 // .createGroupBy() // (必须指定)允许生产者最多被多少个线程使用 .start(3); // 3.多(单)线程生产元素 int threadNum = 3; // 与flequeue.start方法参数对应 for (int i = 1; i <= threadNum; i++) { final int fi = i; new Thread(() -> { for (int j = 1; j <= 100_0000; j++) elementProducer.produce("element" + fi * j); }).start(); } // 4.需要时可关闭生产者(立刻无法生产)和消费者(直到所有元素消费完才会关闭) // elementProducer.stopProducerAndShutdownConsumerGroups(); } } ``` **上述百万元素消费测试案例输出耗时** ```text ConsumerGroup1消费了序号为2999963的元素element3000000花费16179ms ConsumerGroup1消费了序号为2999999的元素element2000000花费16179ms ConsumerGroup1消费了序号为2999872的元素element1000000花费16178ms ```