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

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

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

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


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


范例

如果要想解决同步的问题,那么首先就应该立刻可以想到使用 synchronized 关键字来定义同步的操作方法,所以此时应该将代码修改如下

private string title;private string note;

public void setNote(string note) {

this.note = note;

}

将上方代码修改如下:

private string title;private String note;

public synchronized void get() {

try i

Thread.sleep( 50) ;

catch (InterruptedException e) {

e.printstackTrace();

}

system.out.print1n(this.title + " = " + this.note);

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

this.title = title ;

try i

Thread.sleep(100) ;

}catch (InterruptedException e) {

e.printstackTrace();

}

this.note = note ;

public void setNote(string note) {

this.note = note;

}

public void setTitle(string title) {

this.title = title;

}

public string getNote() {

return note;

}

public string getTitle() {

return title;

暂时先不要

if (x % 2 == ) i

this.data.setTitle("老李");try {

Thread.sleep( 1000) ;

}catch (InterruptedException e) {

e.printstackTrace();

}

this.data. setNote("是个好人");}else i

this.data.setTitle("民族败类");try i

Thread.sleep(200);

}catch (InterruptedException e) i

e.printstackTrace();

}

将上方代码修改为以下方式

for (int x = 0; x < 50; x++) {

if (× % 2 == ) i

this.data.set("老李","是个好人");}else {

this.data.set("民族败类","老方B");

}

}

}

}

T

try {

Thread.sleep(150);

}catch (InterruptedException e) {

e.printstackTrace();

}

system.out.println(this.data.getTitle() + " = " + this.data.getNote())

上方代码修改为 get

this.data.get();

于是现在发现,整个数据的同步得到了很好的解决,但是重复操作的问题严重了

Thread.sleep(50); 这个是取得时间

Thread.sleep(00) ;这是设的延迟

生产快取的慢

所以此代码直解决了数据同步但无法解决交替问题。

相关文章
|
消息中间件 NoSQL 关系型数据库
6年高级开发就因这道题少了5K,Kafka如何避免消息重复消费?
一个6年工作经验的小伙伴,被问到这样一个问题,说Kafka是如何避免消息重复消费的?面试完之后,这位小伙伴来找到我,希望我能给一个思路。今天,我给大家分享一下我的思路。
172 1
|
2月前
|
消息中间件 设计模式 安全
《C++中高效线程安全的生产者 - 消费者模型设计秘籍》
生产者-消费者模型是现代C++多线程编程中的经典设计模式,广泛应用于网络服务器、消息队列等场景。该模型通过生产者生成数据、消费者处理数据的方式,解决多线程间的数据交互问题。设计高效且线程安全的生产者-消费者模型,需考虑线程安全、选择合适的共享数据结构、使用互斥锁和条件变量、优化性能及处理异常情况,以确保程序的稳定性和性能。
|
3月前
|
消息中间件 存储 分布式计算
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
53 4
|
3月前
|
消息中间件 存储 分布式计算
大数据-61 Kafka 高级特性 消息消费02-主题与分区 自定义反序列化 拦截器 位移提交 位移管理 重平衡
大数据-61 Kafka 高级特性 消息消费02-主题与分区 自定义反序列化 拦截器 位移提交 位移管理 重平衡
35 1
|
5月前
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
400 9
|
8月前
|
Java
生产与消费(多线程练习题)
生产与消费(多线程练习题)
45 0
|
消息中间件 缓存 数据库
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
436 0
4 张图,9 个维度告诉你怎么做能确保 RocketMQ 不丢失消息
|
消息中间件 Java RocketMQ
消息消费要注意的细节|学习笔记
快速学习消息消费要注意的细节
消息消费要注意的细节|学习笔记
|
消息中间件 RocketMQ 开发者
消息消费方准备工作|学习笔记
快速学习消息消费方准备工作
消息消费方准备工作|学习笔记
|
消息中间件 RocketMQ 开发者
事务消息的流程分析|学习笔记
快速学习事务消息的流程分析
118 0
事务消息的流程分析|学习笔记