【问题标题】:Synchronizing ArrayList of BlockingQueues同步 BlockingQueues 的 ArrayList
【发布时间】:2013-04-17 21:16:28
【问题描述】:

在 Java 中,我需要一个对象,它是 60 个LinkedBlockingQueues 的ArrayListArrayList 在程序开始时将 .add() 60 LinkedBlockingQueues,同时仍然是单线程的。然后一个线程将.add() 发送到LinkedBlockingQueues,而另一个线程将.poll()。是否需要显式同步这个对象?

【问题讨论】:

    标签: java multithreading arraylist synchronization blockingqueue


    【解决方案1】:

    不,如果列表在初始化后没有被修改,那么你不需要同步它。我建议您使用 UnmodifiableList 而不是 ArrayList - 如果有人在初始化后尝试修改列表,您将收到运行时异常,这比竞争条件更可取。

    【讨论】:

      【解决方案2】:

      是否需要显式同步这个对象?

      如果您在完成List 构建之后 分叉线程,那么您就可以了。但是,如果它是真正不可变的,我会使用数组而不是 Collection。你可以这样做:

      BlockingQueue[] blockingQueueArray =
         blockingQueueList.toArray(new BlockingQueue[blockingQueueList.size()]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        • 2011-05-05
        • 2012-03-02
        • 2023-04-04
        相关资源
        最近更新 更多