线程间的通信

1.线程间的通信:多个线程处理同一个资源,但处理的动作却不同

2.线程间的有效通信:使用等待唤醒机制,实现协调通信,让线程间进行有规律的执行

3.条件:3.1 wait方法与notify方法必须由同一个锁对象调用,因为,对应的锁对象可以通过notify唤醒使用同一个对象调用的wait方法后的线程
          3.2 wait与notify是属于object类的方法,因为,锁可以是任意对象,而任意对象的所属类,都是继承object类的
          3.3 wait与notify必须要在同步代码块或者同步函数中使用,因为,必须通过锁对象调用这2个方法
4.以吃货和包子铺做包子为例子:
                线程A:包子铺线程
                线程B:吃货线程
                共同资源:包子
                规律的执行:如果包子没有,那么包子铺线程要被唤醒做包子,吃货进行无限等待
                            如果包子有了,那么吃货要被唤醒起来吃包子,包子铺线程无限等待

案例如下:

package thread.communication;

/**创建包子类,封装包子的相关信息
 * @author Jeady
 * @Date 2019/8/1
 */
public class Baozi {

    String pi;
    String xian;

    boolean status = false;

    public String getPi() {
        return pi;
    }

    public void setPi(String pi) {
        this.pi = pi;
    }

    public String getXian() {
        return xian;
    }

    public void setXian(String xian) {
        this.xian = xian;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }
}

 

package thread.communication;

/**创建包子铺线程
 * @author Jeady
 * @Date 2019/8/1
 */
public class Baozipu extends Thread{

    Baozi baozi;

    public Baozipu(String name,Baozi baozi) {
        super(name);
        this.baozi = baozi;
    }

    @Override
    public void run() {

        //没有包子,包子铺生产包子,吃货等待
            while (true){
                synchronized (baozi){
                    if (baozi.status == true){

                        try {
                            baozi.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    //注意这里是不可以用else的,当if条件满足的时候,我们还要继续往下执行
                    //有包子,包子铺等待,吃货吃包子
                    System.out.println(getName()+"包子铺开始生产包子了");
                    baozi.pi= "皮薄";
                    baozi.xian = "肉馅儿";
                    System.out.println("包子铺把包子生产好了,改变包子状态为有,并唤醒吃货");
                    baozi.status = true;
                    baozi.notify();
                }
            }

    }
}
package thread.communication;

/**创建吃货线程
 * @author Jeady
 * @Date 2019/8/1
 */
public class Chihuo extends Thread{
    Baozi baozi;

    public Chihuo(String name,Baozi baozi) {
        super(name);
        this.baozi = baozi;
    }

    @Override
    public void run() {
        //没有包子,吃货等待,包子铺唤醒做包子
        while (true){
            synchronized (baozi){
                if (baozi.status == false){
                    try {
                        baozi.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(getName()+"开始吃包子"+baozi.pi+baozi.xian);
                System.out.println("包子吃完了,改变包子状态为没有包子,并唤醒包子铺生产包子");
                baozi.status = false;
                baozi.notify();
            }

        }
    }
}
package thread.communication;

/**进行测试
 * @author Jeady
 * @Date 2019/8/1
 */
public class Test01 {

    public static void main(String[] args) {
        Baozi baozi = new Baozi();

        Baozipu baozipu = new Baozipu("包子铺",baozi);
        baozipu.start();

        Chihuo chihuo = new Chihuo("吃货",baozi);
        chihuo.start();
    }
}

执行结果如下:

 

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值