首页 > 编程语言 >Java基础 阻塞队列的方式实现等待唤醒机制,哪里体现了等待?哪里又体现了唤醒?

Java基础 阻塞队列的方式实现等待唤醒机制,哪里体现了等待?哪里又体现了唤醒?

时间:2023-10-28 15:58:03浏览次数:46  
标签:元素 队列 唤醒 体现 阻塞 线程 等待

Java的阻塞队列(Blocking Queue)可以用来实现等待唤醒机制,其中等待和唤醒的操作在队列的不同方法中体现:

1.等待: 在阻塞队列中,等待通常发生在以下情况:


2.当队列为空时,消费者线程试图从队列中取出元素时,它会被阻塞,直到队列中有元素可供消费。这种等待是通过阻塞队列的take()方法来实现的,其中的阻塞表现为线程被挂起,直到队列非空。
3.当队列已满时,生产者线程试图将元素放入队列时,它也会被阻塞,直到队列中有足够的空间可供使用。这种等待是通过阻塞队列的put()方法来实现的,其中的阻塞表现为线程被挂起,直到队列有足够的空间。


4.唤醒: 唤醒操作发生在以下情况:


5.当队列非空时,生产者线程添加元素到队列后,它将通知等待的消费者线程可以继续执行。这是通过阻塞队列的put()方法或offer()方法来实现的,其中在成功放入元素后,它会唤醒一个或所有等待的消费者线程。
6.当队列有足够的空间时,消费者线程取出元素后,它会通知等待的生产者线程可以继续执行。这是通过阻塞队列的take()方法或poll()方法来实现的,其中在取出元素后,它会唤醒一个或所有等待的生产者线程。

总之,阻塞队列的实现将等待和唤醒操作内部封装在队列的方法中,使得生产者和消费者线程可以通过操作阻塞队列来等待和唤醒,而无需自行编写等待和唤醒的逻辑。这提供了一种方便且线程安全的机制,用于管理线程之间的协作和通信。常见的阻塞队列实现包括LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue等。

 

标签:元素,队列,唤醒,体现,阻塞,线程,等待
From: https://www.cnblogs.com/gagaya2/p/17794161.html

相关文章

  • Java基础 等待唤醒机制(阻塞队列方式实现)
    等待唤醒机制还可以用阻塞队列的方式进行实现    练习:利用阻塞队列完成生产者和消费者(等待唤醒机制)的代码细节:生产者和消费者必须使用同一个阻塞队列阻塞队列的创建方式(泛型:队列里面数据的类型):ArrayBlockingQueue<String> queue = new  ArrayBlockingQueue<......
  • Java基础 等待唤醒机制——生产者代码实现
    packagepojo.xc01;publicclassCookextendsThread{@Overridepublicvoidrun(){while(true){synchronized(Desk.lock){if(Desk.count==0)break;if(Desk.foodFlog==1){//桌子上有食物,就等待......
  • Java基础 等待唤醒机制——消费者代码实现
    等待唤醒机制的三个角色:生产者、消费者、控制生产者和消费者的第三者代码:packagepojo.xc01;//用来控制生产者和消费者的执行publicclassDesk{//桌子上是否有面条(0:没有面条1:有面条)//用布尔类型表示的话有一个小弊端,因为布尔类型只有两个值,只能控制两条线程轮流执行......
  • Java基础 生产者和消费者(等待唤醒机制)
      生产者和消费者完整的执行过程:  ......
  • 等待axios请求的返回值来使用
     我们只要关心代码里面的async和await就行了//apiimportsysConfigfrom'@/api/systemManagement/config'asyncgetSysConfigInfo(id:number|string){constcoolieValue=cookies.get("setup_sysmConfigManage_time")if(!coolie......
  • WinForm实现Loading等待界面
    https://blog.csdn.net/qq_36240878/article/details/84024369?spm=1001.2014.3001.55061、LoaderForm窗体中添加PictureBox,然后添加Loading图片2、窗体内属性设置StartPosition:CenterScreen在屏幕中心显示TopMost:True置顶显示ShowInTaskbar:False不在任务栏显示FormBord......
  • GPDB中Latch等待与唤醒实现机制
    GPDB中Latch等待与唤醒实现机制GreenPlum/PostgreSQL中有很多Latch以帮助多进程以及主线程与从线程之间协作。那么Latch是如何实现的呢?Latch可以在多进程之间以及主线程和从线程之间实现等待与唤醒,WaitEventSet是实现这项功能的关键结构。本文我们聊聊WaitEventSet的实现以及一个用......
  • nRF52840 SYSTEM OFF模式下唤醒的唤醒方式
    参考spec上的说明,唤醒源有5个。分别是:1.GPIO外设发出的DETECT信号2.LPCOMP模块发出的ANADETECT信号3.NFC模块发出的SENSE信号4.USB模块VBUSpin出现有效电压时5.给复位管脚一个信号供参考示例在如下工程中,NCS示例有待再发现\nRF5_SDK_17.1.0\examples\peripheral......
  • 关于低功耗模式下RTC唤醒
    1、关于RTC唤醒失败解决方法问题原因:若使用RTC进行唤醒唤醒不成功,闹钟中断标志没有被置位。原因可能是唤醒信号有毛刺,EXTI系统唤醒,但RTC来不及产生中断标志。解决方法:RTC闹钟中断中判断的标志由RTC_IT_ALR,更改为EXTI_Line17中断标志,需要在中断函数中清17中断线标志。 2、关于......
  • 安防监控国标GB28181平台LiteCVR修改录像计划的等待时间较长,该如何解决?
    我国在智能视频安防监控领域相较国外起步较晚,但随着近些年互联网等技术的发展,我国在该领域迅猛发展,取得了不错的成果。有用户反馈,GB28181视频监控平台LiteCVR修改录像计划的等待时间较长。今天我们来针对这个案例做一个分析和讲解。根据反馈我们立即进行排查,发现其实修改单个通......