摘要: 管程 一般要实现多线程同步有两种解决方案,分别是信号量和管程原语,信号量通过PV操作可以很方便的实现线程间的互斥操作,如果拿到信号量的许可后才能执行线程处理,但是信号量使用有个弊端就是在业务代码中有大量的PV方法要编写,如果在某个地方处理了P但是没有使用V进行释放,那么其他线程就会阻塞无法执行下去。 阅读全文
posted @ 2025-09-11 13:33 RainbowMagic 阅读(10) 评论(0) 推荐(0)
摘要: 可重入独占锁 ReentrantLock 可重入的意思是在同一线程中可用多次获取同一把锁而不阻塞,独占锁则是只能被一个线程使用。 如下代码所示,我们有8张票,要用10个线程去抢,肯定会出现两个线程抢不到,但是实际运行结果由于多个线程读到同一个值然后去执行业务操作,就会出现超卖的问题 public c 阅读全文
posted @ 2025-09-10 00:42 RainbowMagic 阅读(6) 评论(0) 推荐(0)
摘要: 分布式事务 在日常开发中,我们在调用数据库完成业务功能时,只操作单个数据库实例,如果在业务处理过程中出现异常异常时,我们可用直接回滚就可以可以满足ACID。如下所示: 有个名称叫user的数据库 数据源配置如下所示: spring: datasource: driver-class-name: co 阅读全文
posted @ 2025-09-09 02:55 RainbowMagic 阅读(12) 评论(0) 推荐(0)
摘要: 并发安全 线程安全性 多线程在执行过程中,执行结果总是出乎意料的,无法保证代码的执行正确。 如下是线程不安全的代码,我们的预期执行结果是150000,但是它每次运行的结果都不一样,所以这个代码有线程安全问题。 package com.lyra; import java.util.concurrent 阅读全文
posted @ 2025-09-07 00:48 RainbowMagic 阅读(6) 评论(0) 推荐(0)
摘要: CAS 原子性 一组操作不允许被其他线程打断被称为原子性。 synchronized关键字可以实现原子性,只要拿到锁才会进入synchronized,被synchronized关键字引用的语句不会被其他线程打断, 那么为什么有了synchronized关键字还要搞个CAS,这就有点多次一举了。原因是 阅读全文
posted @ 2025-09-06 08:25 RainbowMagic 阅读(11) 评论(0) 推荐(0)
摘要: 分布式场景下锁失效的问题 单体锁 我们在库存中有五千个商品,然后我们的业务代码模拟一下从redis中获取库存数据,入库有库存则执行库存-1并设置回redis中。 @GetMapping("/test") public String test() { int stock = Integer.parse 阅读全文
posted @ 2025-09-02 13:42 RainbowMagic 阅读(5) 评论(0) 推荐(0)
摘要: 无边框 我们创建的应用程序如下图所示,创建出来的应用程序会有边框,上方会有关闭、最大化和最小化按钮,一般来说Windows默认的这个太丑了,所以我们需要将边框都隐藏掉,我们自己画漂亮的页面。 WindowStartupLocation: 窗口初始化显示位置 Manual:手动指定,根据Left和to 阅读全文
posted @ 2025-09-02 13:38 RainbowMagic 阅读(14) 评论(0) 推荐(0)
摘要: 缓存设计 缓存穿透 一般来说,我们的业务处理是,先查缓存,如果缓存中没有数据的话再查DB并将DB数据进行缓存并返回给用户。我们假定有个恶意用户,疯狂查询一些不存在的数据,这些数据肯定是在缓存层找不到的,然后这些请求就会打到数据库,这下缓存层就失去了存在的意义。 解决方案: 在接收到用户请求时,如果找 阅读全文
posted @ 2025-08-22 10:14 RainbowMagic 阅读(11) 评论(0) 推荐(0)
摘要: 布局原则 不用显式的方式定义元素的尺寸。元素的尺寸尽量不要写死,这样可能更好的满足响应式,例如一下一个例子,我们有个国际化的需求,要求用户名中英文双语展示。如果一开始将用户名的长度设置成100时,用户名展示正常,似乎也没有什么问题。 现在将用户名改为国际化的username时,就会发现用户名展示不全 阅读全文
posted @ 2025-08-10 17:43 RainbowMagic 阅读(13) 评论(0) 推荐(0)
摘要: C#框架 WPF: 界面与业务逻辑隔离,由于客户不同的业务需求,即便是前端变了也不会影响后端实际的业务逻辑。 WInform: 把所有组件对象话,可用直接拖动组件来进行快速开发。 SliverLight: 跨平台,跨浏览器插件,类似Flash。 异同点 输出结果都是客户端程序 界面渲染: winfr 阅读全文
posted @ 2025-08-01 00:10 RainbowMagic 阅读(36) 评论(0) 推荐(0)