【第 06 个代码模型】综合案例:生产者与消费者(解决重复操作问题)|学习笔记

简介: 快速学习 【第 06 个代码模型】综合案例:生产者与消费者(解决重复操作问题)

开发者学堂课程【【名师课堂】Java 高级开发【第 06 个代码模型】综合案例:生产者与消费者(解决重复操作问题)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/372/detail/4567


【第 06 个代码模型】综合案例:生产者与消费者(解决重复操作问题)


内容介绍

一、方法名称

二、范例

 

一、方法名称

NO.

方法名称

类型

描述

01

Public final void wait()throws InterruptedException

普通

等待、死等

02

Pudlic final void notify()

普通

唤醒第一个等待线程

03

Pudlic final void notify()

普通

唤醒全部等待线程,那个优先级高,谁有可能先执行

现在的代码之中依然会存在有数据的重复设置或重复取出的问题,所以如果想要解决他就必须增加等待与唤醒机制。如果要想使用这一功能,就必须参考 Object 类中提供的方法;

 

二、范例

通过等待与唤醒机制来解决数据的重复操作问题

private string title;private string note;

/ flag = true:表示允许生产,但是不允许消费者取走

/falg = false:表示生产完毕,允许消费者取走,但是不能够生产 private boolean flag = true ;

public synchronized void get( {

if (flag m= true) { l/已经生产了,所以不允许重复生产

try i

.super.wait(o; t等待执行

catch (InterruptedException e) i

e.printstackTrace(;

}

Thread.sleep(5e);

}catch (InterruptedException e) {

e.printstackTrace();

if (flag == false){ l/已经生产了,所以不允i

this.flag = false ; 1/表示已经生产过了,不允许再生产了

super.notify; 1/唤醒等待线程|

public synchronized void set(string title,string note) {

if (this.flag == false) i //广现在不允许取走

try i

super.wait(o;1/等待执行

}catch (InterruptedException e) f.e.printstackTrace(o;

this.title = title ;

try i

Thread.sleep(10);

}catch (InterruptedException e) i

e.printstackTrace();

this.note = note ;

public synchronized void set(String title,strir

if (this.flag == true i/现在不允许取走

trv {

this.note = note ;

this.flag = true ; l/表示继续生产super.notify(); l

}\

 

面试题请解释是 sleep()与wait() 的区别?

sleep() 是 Thread 类中定义的方法,到了一定的时间后该休眠的线程可以自动唤醒

wait()Object 类中的定义的方法,如果想要唤醒,必须使用 notify()、notifyAll() 才可以唤醒。

相关文章
|
消息中间件 NoSQL 关系型数据库
6年高级开发就因这道题少了5K,Kafka如何避免消息重复消费?
一个6年工作经验的小伙伴,被问到这样一个问题,说Kafka是如何避免消息重复消费的?面试完之后,这位小伙伴来找到我,希望我能给一个思路。今天,我给大家分享一下我的思路。
167 1
|
2月前
|
消息中间件 设计模式 安全
《C++中高效线程安全的生产者 - 消费者模型设计秘籍》
生产者-消费者模型是现代C++多线程编程中的经典设计模式,广泛应用于网络服务器、消息队列等场景。该模型通过生产者生成数据、消费者处理数据的方式,解决多线程间的数据交互问题。设计高效且线程安全的生产者-消费者模型,需考虑线程安全、选择合适的共享数据结构、使用互斥锁和条件变量、优化性能及处理异常情况,以确保程序的稳定性和性能。
|
5月前
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
369 9
|
消息中间件 存储 负载均衡
两个实验让我彻底弄懂了「订阅关系一致」
这篇文章,笔者想聊聊 RocketMQ 最佳实践之一:**保证订阅关系一致**。 订阅关系一致指的是同一个消费者 Group ID 下所有 Consumer 实例所订阅的 Topic 、Tag 必须完全一致。 如果订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢失。
两个实验让我彻底弄懂了「订阅关系一致」
|
8月前
|
Java
生产与消费(多线程练习题)
生产与消费(多线程练习题)
44 0
|
前端开发 NoSQL Redis
项目实战典型案例5——发送调查问卷流程图例子(将不必要的逻辑放入前端)
项目实战典型案例5——发送调查问卷流程图例子(将不必要的逻辑放入前端)
126 0
第十二章队列模拟注意事项
第十二章队列模拟注意事项
62 0
|
消息中间件 Java RocketMQ
消息消费要注意的细节|学习笔记
快速学习消息消费要注意的细节
消息消费要注意的细节|学习笔记
|
消息中间件 RocketMQ 开发者
顺序消息分析|学习笔记
快速学习顺序消息分析
102 0
顺序消息分析|学习笔记
|
消息中间件 关系型数据库 MySQL