开发者社区 问答 正文

简述线程池阻塞队列LinkedBlockingQueue

简述线程池阻塞队列LinkedBlockingQueue

展开
收起
huc_逆天 2021-01-11 10:08:36 741 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
    1. 这是个类似无界限的阻塞队列,由一个单链表实现的。先进先出的顺序。支持多线程并发操作。相比于数组实现的ArrayBlockingQueue的有界,LinkedBlockingQueue可认为是无界队列。多用于任务队列。LinkedBlockingQueue不同于ArrayBlockingQueue,它如果不指定容量,默认为Integer.MAX_VALUE,也就是无界队列。所以为了避免队列过大造成机器负载或者内存爆满的情况出现,我们在使用的时候建议手动传一个队列的大小,
    2. 两者的实现队列添加或移除的锁不一样,ArrayBlockingQueue实现的队列中的锁是没有分离的,即添加操作和移除操作采用的同一个ReenterLock锁,而LinkedBlockingQueue实现的队列中的锁是分离的,其添加采用的是putLock,移除采用的则是takeLock,这样能大大提高队列的吞吐量,也意味着在高并发的情况下生产者和消费者可以并行地操作队列中的数据,以此来提高整个队列的并发性能。
    3. 还要注意如果用LinkedBlockingQueue长时间处理大数据量注意GC。
    2021-01-13 20:25:01 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等