首页 > 其他分享 >等待唤醒机制

等待唤醒机制

时间:2024-07-08 11:26:02浏览次数:3  
标签:面条 lock 唤醒 foodFlag Desk new 机制 等待 public


厨师


public class Cook extends Thread{
    @Override
    public void run() {
        while(true){
            synchronized (Desk.lock) {
                if (Desk.count==0){
                    break;
                }else {
                    if (Desk.foodFlag==1){
                        try {
                            Desk.lock.wait();
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }

                    }else {
                        System.out.println("厨师做了一碗面条");
                       //面条加1
                        Desk.foodFlag=1;
                        //打开睡眠
                        Desk.lock.notifyAll();
                    }
                }

            }
        }
    }
}

面条

public class Foodie extends Thread {
     /*
        1.循环
        2.同步代码块
        3.判断是否到末尾
        4.没有到末尾进行执行核心

         */

    @Override
    public void run() {
        while (true) {
            //进行上锁
            synchronized (Desk.lock) {
                //判断是否吃完
                if (Desk.count == 0) {
                    break;
                } else {
                    //判断是否有面条
                    if (Desk.foodFlag == 0) {
                        try {
                            Desk.lock.wait();
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }
                        //有面条
                        //吃的碗减一
                    } else {
                        Desk.count--;
                        System.out.println("吃货在吃面条还能吃" + Desk.count + "晚");
                        //吃完唤醒厨师做饭
                        Desk.lock.notifyAll();
                        //修改桌子状态
                        Desk.foodFlag = 0;
                    }
                }
            }
        }
    }
}

创建对象

public class Desk {

    //判断是否有面条
    public static int foodFlag=0;
    //总数
    public static  int  count=10;
    //锁对象
    public  static Object lock = new Object();
}

程序主入口

public class ThreadDeno {
    public static void main(String[] args) {
        //创建线程对象
        Cook c = new Cook();
        Foodie f = new Foodie();
        //设置名字
        c.setName("厨师");
        f.setName("吃货");
        c.start();
        f.start();
    }

}

标签:面条,lock,唤醒,foodFlag,Desk,new,机制,等待,public
From: https://blog.csdn.net/2401_84239732/article/details/140187375

相关文章

  • 双亲委派机制和SPI的理解
    双亲委派机制和SPI的理解双亲委派机制基本原理双亲委派机制简单的来说是JVM类加载过程的一个非强约束模型。子类加载器加载对应的Class,不会直接加载,首先会交由其父类加载器加载,若父类加载器无法加载,则由自己加载。Java一共有三层类加载器,级别从上往下依次是:BootStrapClass......
  • 语法2-运算符、包机制、JavaDoc
    语法运算符运算符具有优先级-网上查(一般使用括号保证)/-除,%-取余符号-21/10二十一除十取余数,幂运算使用工具类表示Math.pow(2,3)-2的3次方++自加,--自减inta=3;intb=a++;//输出a=4,b=3intb=++a;//输出a=4,b=4==-等于,!=-instanceof-不等于逻辑运算符-与或非-&......
  • tcp 中的poll机制介绍
    加入poll或者select机制可以使程序更加健壮和高效,特别是在需要处理多个连接时。虽然上面的示例是基于单线程的accept和read,它只能处理一个连接,直到它结束才能处理下一个连接。这种方法在简单应用中可能足够,但在实际生产环境中,通常会遇到需要同时处理多个连接的情况。......
  • 解决 SQL Server 安装失败均,报错“等待数据库引擎恢复句柄失败”
    解决方案:方案1:格式化硬盘重新分配扇区大小,让扇区大小与SQLServer匹配。此方法可以将整个硬盘格式化掉,当然这样做的结果就是丢失所有文件,并且还需要重装系统。也可以格式化一个硬盘分区,将SQLServer安装到对应的分区就行。方案2:强制模拟扇区大小为4Kb此方法不会影响硬盘分区,......
  • 双 Token 无感刷新机制实现
    ✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。......
  • java内存管理机制垃圾回收的详细说明
    前言在前面三篇文章中,对JVM的内存布局、内存分配、垃圾标记做了较多的介绍,垃圾都已经标记出来了,那剩下的就是如何高效的去回收啦!这篇文章将重点介绍如何回收旧手机、电脑、彩电、冰箱~啊呸(⊙o⊙)…将重点介绍几种垃圾回收算法、HotSpot中常用的垃圾收集器的主要特点和应用场......
  • 014文章解读与程序——中国电机工程学报,电力自动化设备EI\CSCD\北大核心《主动配 电
    ......
  • 自注意力机制self-attention
     self-attention步骤: (1)得到Q、K、V      扩展到多头注意力机制:   self-attention存在缺点:缺少位置信息为每一个输入设置一个positionalvectorei  ......
  • YOLOv8改进 | 注意力机制 | 增强模型在图像分类和目标检测BAM注意力【小白必备 + 附完
    秋招面试专栏推荐:深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • 网络爬虫:如何应对反爬虫机制?
    在网站设计时,为了保证服务器的稳定运行,防止非法数据访问,通常会引入反爬虫机制。一般来说,网站的反爬虫机制包括以下几种:1.CAPTCHA:网站可能会向用户显示CAPTCHA,要求他们在访问网站或执行某些操作之前输入代码。2.IP封锁:网站可能会封锁那些频繁或异常访问模式或行为不符合......