线程通信吃包子案例、线程池、Lambda表达式、可变长参数、JUnit: 单元测试

本文深入探讨Java多线程的线程通信,包括wait、notify和notifyAll方法,通过包子铺与吃货的线程通信案例进行解释。接着讲解线程池的使用,如Executors工厂类中的方法。然后,重点介绍Lambda表达式的概念和使用,包括其与匿名内部类的区别。此外,还涵盖了可变长参数的使用规则。最后,简述了单元测试框架JUnit的基本操作和常用注解。
摘要由CSDN通过智能技术生成

一。线程通信: 共享资源
wait() notify()
notify() - 每次只能唤醒一个线程, 只能唤醒等待时间久的那个线程
notifyAll() - 唤醒所有正在等待的线程
wait() -> 只能被notify() 或者 notifyAll() 唤醒
wait(long) -> 到时间以后, 自动醒来
1.包子铺和吃货的线程通信

public class Baozi {
   
    String pier;
    String xiang;
    boolean flage=false;//初始化包子资源状态
}
---------------------------------------------
public class Baozipu extends Thread {
   
    private Baozi bz;

    public Baozipu(String name, Baozi bz) {
   
        super(name);
        this.bz = bz;
    }
    @Override
    public void run() {
   
        int count = 0;
        //造包子
        while (true) {
   
            synchronized (bz) {
   
                //有包子,先等待不造
                if (bz.flage) {
   
                    try {
   
                        bz.wait();
                    } catch (InterruptedException e) {
   
                        e.printStackTrace();
                    }
                }
                //没包子,造包子
                if (!bz.flage) {
   
                    System.out.println(Thread.currentThread().getName() + "包子铺开始生产包子");
                    try {
   
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
   
                        e.printStackTrace();
                    }
                    if (count % 2 == 0) {
   
                        bz.pier = "冰皮";
                        bz.xiang = "无仁";
                    } else {
   
                        bz.pier = "薄皮";
                        bz.xiang = "牛肉大葱";
                    }
                    count++;
                    //造出包子改flage
                    System.out.println("包子造好了:" + bz.pier + bz.xiang);
                    System.out.println("吃货来吃吧");
                    bz.flage = true;
                    //唤醒吃货线程
                    bz.notify();//唤醒等待时间最长的那个线程
                }
            }
        }
    }
}
--------------------------------------------------
public class Chihuo extends Thread {
   
    private Baozi bz;

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

    @Override
    public void run() {
   
        while (true) {
   
            synchronized (bz) {
   
                //没包子,等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值