在我的应用程序中,数据生成速度(存储在并发链接队列中)比我单线程可以消耗的速度要大。

我决定从创建4个线程来使用数据开始,以防止我的应用程序出现“内存不足异常”。

问题 :

  • 对于上述问题,还有其他更好的设计示例吗?
  • 我们可以在多个线程上并发LinkedQueue进行迭代,并在迭代时删除元素吗?

  • 最佳答案

    我认为您不应该迭代,而是从队列中创建每个轮询数据的4个线程,以便将轮询数据删除或换句话说,将其消耗掉

    // your queue
    ConcurrentLinkedQueue concurrentLinkedQueue = new ConcurrentLinkedQueue();
    
        // create 4 Threads
        for (int i = 0; i < 4; i++) {
            new Thread(() -> {
                while (!concurrentLinkedQueue.isEmpty()) {
                    // consume element
                    var element = concurrentLinkedQueue.poll();
    
                    // do something with element
                    // here
                }
            }).start();
        }
    

    10-04 11:05