生产者消费者 BlockingQueue 实现

本文详细介绍了BlockingQueue在并发编程中的应用,特别是生产者消费者模式的实现。通过使用Java的BlockingQueue,展示了如何在多线程环境下实现资源的高效共享与管理。文章中通过实例代码,深入探讨了如何利用BlockingQueue的特性,避免了传统同步机制的复杂性和潜在问题,使得多线程程序更加清晰和易于维护。

BlockingQueue是一个线程安全的队列,本身的部分方法实现了线程之间的调度,实现生产者消费者非常方便,比synchronized,wait更容易控制,不过看BlockingQueue的实现类ArrayBlockingQueue的源码,主要还是使用Lock和条件变量Condition来实现,足以见的Lock的灵活和强大,下面是我写的实现:

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * Created by Administrator on 14-4-8.
 */
public class BlockingQueueDemo {

    public static void main (String[] args) {
        BlockingQueue blockingQueue = new ArrayBlockingQueue(GodOwn.MAX_SIZE);
        GodOwn godOwn = new GodOwn(blockingQueue);
        for (int i = 0; i < 10; i++) {
            new Producer(godOwn).start();
        }

        for (int i = 0; i < 10; i++) {
            new Reducer(godOwn).start();
        }
    }

}

class GodOwn {

    /**
     * 仓库能盛放馒头最大数量
     */
    public static final int MAX_SIZE = 3;

    private BlockingQueue<Mantou> blockingQueue;

    GodOwn (BlockingQueue<Mantou> blockingQueue) {
        this.blockingQueue = blockingQueue;
    }

    public void produce () throws InterruptedException {
        Mantou mantou = new Mantou();
        blockingQueue.put(mantou);
        System.out.println("生产了一个,仓库还有" + blockingQueue.size());
    }

    public void reduce () throws InterruptedException {
        blockingQueue.take();
        System.out.println("消费了一个,仓库还有" + blockingQueue.size());
    }

}

/**
 * 消费者
 */
class Producer extends Thread {
    private GodOwn godOwn;

    Producer (GodOwn godOwn) {
        this.godOwn = godOwn;
    }

    public void run () {
        try {
            godOwn.produce();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

/**
 * 消费者
 */
class Reducer extends Thread {
    private GodOwn godOwn;

    Reducer (GodOwn godOwn) {
        this.godOwn = godOwn;
    }

    public void run () {
        try {
            godOwn.reduce();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

/**
 * 馒头
 */
class Mantou {
}

 

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值