synchronized 关键字底层原理
目录 synchronized字节码解析 synchronized与管程的关系 synchronized与JMM的关系 synchronized与java对象头解析 synchronized-cpu的实现 synchronized-应用场景和实现方式 本文将深入介绍synchronized的工作原理以及与管程、Java内存模型、对象头和CPU层面的关系。包括synchronized的字节码解析、与管程的关系、与JMM的关系、对象头的解析和与CPU的实现。接着,会描述synchronized的应用场景和实现方式。 深入理解Java的synchronizedJava中的**synchronized关键字是并发编程中的核心元素,用于实现线程间的同步。本文将深入分析synchronized**的实现原理和应用,通过解析字节码、探讨与管程(Monitor)的关系、Java内存模型(JMM)、对象头以及CPU层面的实现来全面了解其工作机制。 synchronized字节码解析在Java中,**synchronized关键字用于实现线程间的同步。当使用这个关键字时,Java虚拟机(JVM...
RESTful API规范
RESTful API规范 1. 引言 RESTful API概述 REST的定义和基本原则 为什么需要设计规范 2. RESTful API基础 2.1 什么是RESTful架构 2.2 REST vs. SOAP 2.3 资源的无状态性 2.4 HTTP方法 2.5 有关幂等性和安全性的考虑 3. 资源设计 3.1 资源设计规范 3.2 资源的版本控制 3.3 对资源的操作 3.4 构建RESTful API的请求和响应 4. RESTful API的安全和性能 4.1 安全考虑 4.2 性能优化 5. RESTful API的测试和调试 6. 案例 1. 引言RESTful API概述REST(Representational State Transfer)是一种基于网络的软件架构风格,强调系统中的资源和资源之间的交互。RESTful API是按照REST原则设计的API,通过使用HTTP协议的GET、POST、PUT、DELETE等方法对资源进行操作。这种设计风格使得API具有简洁、可扩展和易于理解的特点。 REST的定义和基本原则 资源(R...
java-观察者模式
java-观察者模式 观察者模式介绍 观察者模式UML 观察者模式的设计原则 观察者模式-java内置实现 观察者模式-google实现 观察则模式-手写demo 观察者模式使用场景 观察者模式介绍观察者模式是一种常用的设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,所有依赖于它的观察者对象都会得到通知并且自动更新。(观察者模式又叫做发布订阅模式) 观察者模式的核心思想是解耦,它将观察者和主题解耦,让它们之间的依赖变得松散。在观察者模式中,主题只知道观察者的存在,并不知道观察者的具体实现。当主题状态发生改变时,它只需要通知观察者即可,而不需要关心观察者的具体实现。 观察者模式UML观察者模式的UML图如下所示: 观察者模式的设计原则观察者模式满足的设计原则包括:开闭原则、单一职责原则、依赖倒置原则。其中,开闭原则指的是观察者模式允许增加观察者类而无需修改主题类代码,从而符合开闭原则;单一职责原则指的是主题类只负责管理观察者,不涉及具体业务逻辑,符合单一职责原则;依赖倒置原则指的是主题类和观察者类都依赖于抽象,符合...
ThreadLocal 原理,一次讲透 🧵
ThreadLocal 像是给每个线程发了一把「私人抽屉钥匙」🔑——抽屉都在同一栋楼(JVM)里,但钥匙不通用。 一、ThreadLocal 是干嘛的?🤔一句话总结: ThreadLocal = 线程私有变量容器。 它让 同一个变量名,在不同线程里各活各的,互不打扰: ❌ 不用加锁 ❌ 不会线程不安全 ✅ 性能轻快,像春风一样 ⚠️ 重要澄清: ThreadLocal 不是用来共享数据的,它的使命是——隔离。 常见使用场景: 用户登录信息(userId) TraceId / 日志上下文 🧾 数据库连接、事务上下文 二、怎么用?简单到离谱 🧩ThreadLocal 只有三个灵魂方法: set():往线程抽屉里放东西 📦 get():从抽屉里拿东西 🫴 remove():清空抽屉(很重要!)🧹 1234567891011121314151617181920212223242526272829303132333435public class ThreadLocalDemo { private static ...
设计模式 -java篇
Java设计模式 设计模式简介 Java中使用设计模式的重要性 java中使用设计模式的目的和优点 设计原则 单一职责原则 (SRP) 开放封闭原则 (OCP) 里氏替换原则 (LSP) 接口隔离原则 (ISP) 依赖倒置原则 (DIP) 迪米特法则 (LoD) 合成复用原则 (CRP) 设计模式类型 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰器模式 外观模式 享元模式 代理模式 行为型模式 职责链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 使用设计模式的最佳实践 相关推荐 设计模式简介设计模式是一种被广泛应用于软件开发中的解决特定问题的方案。它们是经验丰富的程序员和软件设计师发现和总结的一些最佳实践,可以帮助开发人员更有效地解决各种问题。使用设计模式,可以提高代码的可读性、可维护性和可扩展性,同时还可以降低代码的复杂度和错误率。 设计模式的目的是提高代码的质量和可重用性。通过使用...
java8 新特性
今天写一个有意思的东西,spring的特殊注入(List,Map) 之前在整理观察者模式和中介者模式的时候,都需要有一个集合容器来放入我们的被执行的对象(前文请参考:观察者,中介者)有时候不同逻辑需要的集合里面元素不一样,有时候会引出线程安全问题(可以用多例来保证线程安全)。看看今天需要学习的内容,首先定义一个接口和三个实现类: 需要把这几个实现类放入集合中,方便我们调用通常做法: 12345678910111213141516171819202122@Resource(name = "aDemoService")private DemoService aDemoService;@Resource(name = "bDemoService")private DemoService bDemoService;@Resource(name = "cDemoService")private DemoService cDemoService;@Testvoid test(){ List<DemoSer...
spring的特殊注入(List,Map)
今天写一个有意思的东西,spring的特殊注入(List,Map) 之前在整理观察者模式和中介者模式的时候,都需要有一个集合容器来放入我们的被执行的对象(前文请参考:观察者,中介者)有时候不同逻辑需要的集合里面元素不一样,有时候会引出线程安全问题(可以用多例来保证线程安全)。看看今天需要学习的内容,首先定义一个接口和三个实现类: 需要把这几个实现类放入集合中,方便我们调用通常做法: 12345678910111213141516171819202122@Resource(name = "aDemoService")private DemoService aDemoService;@Resource(name = "bDemoService")private DemoService bDemoService;@Resource(name = "cDemoService")private DemoService cDemoService;@Testvoid test(){ List<DemoSer...
布隆过滤器
布隆过滤器是名叫bloom的家伙在1970年发明的一个过滤器,核心思想是告诉你说不存在就一定不存在,说存在不一定存在,现在多用于把数据放入内存,减少网络和磁盘的io 底层是利用长度为n的为二进制位数组,上面有k个哈希算法,每次增加需要多个哈希算法判断多个数组位置,然后修改为1;查找也是一样,通过多个哈希算法查找数组位置是否为1.如果有一个为0,表示不存在 ==这里就涉及到一个问题,哈希算法必然存在哈希冲突。一个值的数组位置为0 ,但是被其他值的哈希算法标识为1 ,所以查找时候说存在就不一定存在。== 1换算一下存储100万个元素。就是100万/8/1024≈122千字节 ,还不到1Mb 添加数据通过多个布隆过滤器函数计算,找到相应的多个二进制数组位,修改为1 查找同添加一样, 通过多个布隆过滤器函数计算二进制位数组的位置是否为1,如果都是1,说明有可能存在如果都不为1,说明一定不存在 删除因为一个二进制位数据的元素位可能被很多元素共享,所以删除不能实现 12345678910111213141516171819202122...












