Java学习---------阻塞队列

        阻塞队列是Java并发包中提供的一种特殊队列,它在普通队列的基础上增加了两个附加操作:

        阻塞插入:当队列满时,插入元素的线程会被阻塞,直到队列不满

        阻塞移除:当队列空时,获取元素的线程会被阻塞,直到队列不空

        

public interface BlockingQueue<E> extends Queue<E> {
    // 阻塞式插入
    void put(E e) throws InterruptedException;
    
    // 阻塞式获取
    E take() throws InterruptedException;
    
}

        阻塞队列主要用于:

        线程协作的自然方式:阻塞队列提供了一种优雅的线程间通信机制,可以轻松的视线一些模式,如生产者-消费者模式:

// 生产者
public void run() {
    while(true) {
        queue.put(produceItem());
    }
}

// 消费者
public void run() {
    while(true) {
        consume(queue.take());
    }
}

        

        解决生产消费速率不匹配问题:当生产速度 > 消费速度时,队列满会阻塞生产者;反之,当消费速度 > 生产速度时,队列空会阻塞消费者

         避免显式线程同步:阻塞队列内置的线程安全机制避免了开发者手动实现wait/notify等复杂同步操作

        其好处与坏处如下;

优点说明
简化开发内置线程安全,避免手动同步
解耦生产消费生产者和消费者互不依赖
流量控制通过队列容量限制系统负载
平衡系统负载平滑突发流量,削峰填谷
提高响应性

生产者不会被消费者拖慢

缺点说明
可能造成线程堆积队列满时大量生产者线程阻塞
延迟问题消息在队列中等待导致处理延迟
资源占用队列积压会占用大量内存
死锁风险不合理的容量设置可能导致系统僵死
调试困难阻塞行为使问题难以复现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值