首页 > 编程语言 >Java基础 等待唤醒机制——消费者代码实现

Java基础 等待唤醒机制——消费者代码实现

时间:2023-10-28 14:44:50浏览次数:26  
标签:Java 面条 lock 代码 static Desk 唤醒 public

等待唤醒机制的三个角色:生产者、消费者、控制生产者和消费者的第三者

代码:

package pojo.xc01;

//用来控制生产者和消费者的执行
public class Desk {
//桌子上是否有面条(0:没有面条 1:有面条)
//用布尔类型表示的话有一个小弊端,因为布尔类型只有两个值,只能控制两条线程轮流执行
public static Integer foodFlog = 0;

//定义一个变量表示总个数,表示吃货最多可以吃多少
public static Integer count = 10;

//锁对象
public static Object lock = new Object();
}
------------------------------------------------------------------------------
package pojo.xc01;

public class Foodie extends Thread{
@Override
public void run() {
while (true) {
synchronized (Desk.lock) {
if (Desk.count == 0)
break;
//先判断桌子上是否有面条
if (Desk.foodFlog == 0) {
try {
Desk.lock.wait();//让当前线程跟锁进行绑定,一旦绑定之后,我们进行notify唤醒的时候 就可以操作了
} catch (Exception e) {
e.printStackTrace();
}
} else { //桌子上有面条,开吃
Desk.foodFlog = 0;
Desk.count--;
Desk.lock.notifyAll();//唤醒跟这把锁绑定的所有线程
}

}
}
}
}

标签:Java,面条,lock,代码,static,Desk,唤醒,public
From: https://www.cnblogs.com/gagaya2/p/17794062.html

相关文章

  • php代码审计学习----蜜蜂cms代码审计
    php代码审计学习----蜜蜂cms代码审计源码https://github.com/Betsy0/CMSVulSource/tree/main/beescms环境搭建这个需要用docker搭建环境用windows的phpstudy会出现403然后chmod-R777html在docker容器里mysql-uroot-prootcreatedatabasebeescms;然后再/etc/mysq......
  • javaweb--事务
    beginupdate.........commit事务的四大特征A原子性--要么都成功要么都失败C一致性--事务完成时必须所有数据都保持一致状态I隔离性--多个事务之见操作的可见性D持久性--事务一旦提交或会滚,对数据库中数据的改变是永久的查看事务默认自动提交select@@autocommit;1->自......
  • Java8新特性
    Stream流可以说是Java8新特性中用起来最爽的一个功能了,有了它,从此操作集合告别繁琐的for循环。但是还有很多小伙伴对Stream流不是很了解。今天就通过本篇,一起深入了解下如何使用它。Java8Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合进行链状流式的操......
  • Javaweb常用依赖版本(未完结)
    说明因idea与jdk版本的原因,一些高版本的依赖不能使用。这里列举常用依赖,使运行无错。版本说明idea2019jdk1.8MySQL5.7.24框架版本2.7web、MySQL、mybatis等可用自带的依赖Lombok<dependency><groupId>org.projectlombok</groupId><artifa......
  • Java基础 生产者和消费者(等待唤醒机制)
      生产者和消费者完整的执行过程:  ......
  • Java基础 当某一个线程执行代码时发现锁已经被锁住了,该线程会怎么样?
    当一个线程尝试获取一个已经被其他线程锁住的锁时,它的行为取决于所使用的编程语言和锁的类型。一般情况下,有以下几种可能的行为:1.阻塞等待:线程会被阻塞,直到锁变为可用。这是最常见的情况,通常用于互斥锁。在Java中,可以使用synchronized关键字或ReentrantLock类来实现这种行为。2.......
  • java——redis随笔——实战——优惠券秒杀
    黑马视频地址:https://www.bilibili.com/video/BV1cr4y1671t?p=49&spm_id_from=pageDriver&vd_source=79bbd5b76bfd74c2ef1501653cee29d6 csdn地址:https://blog.csdn.net/weixin_50523986/article/details/131815165          stringRedisTemplate.......
  • 5款在线JavaScript加密混淆工具
    5款常用、好用的在线JavaScript加密混淆工具,网址请从截图中查看。1、jscrambler2、JShaman3、javascriptobfuscator4、freejsobfuscator5、jjencode......
  • Java中的Set集合
    Set集合的特点:不能存储相同元素。Set接口两大实现(常用):HashSetTreeSetSet是一个抽象接口,不能对Set进行实例化。(Setset=newSet();)错误该接口主要继承于Collection接口,所以具有Collection的一些常见的方法。1.add()向集合中添加元素,返回Boolean2.clear()  ......
  • 你知道Java21中的顺序集合吗?
    在Java21中,处理集合的方式得到了改进,因为三个新的接口已经融入了现有的类型层次结构。这些顺序集合为我们提供了一个统一的API来访问第一个和最后一个元素,并以相反的顺序处理集合。为了更好地理解顺序集合是什么,让我们回顾一下集合之前的样子。Java集合框架在Java1.2中引入的C......