多线程编程
文章平均质量分 93
串串店藕片打孔员
有的人光彩夺目,有的人浅薄平庸。这一生想做前者
展开
-
商品扣减库存好一点儿的方式(只通过数据库处理)
前言相信很多小伙伴在面试一些有涉及订单相关的公司时,技术面都有:“商品扣减库存怎么操作?你的SQL是怎么写的?”如果你回答说,就很简单啊:update stock_table set stock=#{扣减后的库存} where product_id=#{product}那我估计面试官就会对你摇摇头了正文我们分析在商品购买的过程中,库存的扣减过程根据商品id查询商品的剩余库存根据下单的数量,计算剩余库存是否足够,如果库存不足就返回相应的提示;相反,则减去扣除的库存得到最新的库存剩余值更原创 2022-02-10 17:57:05 · 2023 阅读 · 0 评论 -
Synchronized 和 Lock 对比学习
wait 与 sleep 方法字节码分析Object 里面定义了几个与线程相关的方法: wait 方法、notify方法、notifyAll方法。这些方法可以解决线程之间的通信问题wait方法被 native 关键词修饰,底层是通过 C++ 代码实现。wait 方法会导致线程等待,直到其他的线程调用了这个对象的 notify / notifyAll 方法才会使得这个线程唤醒。调用 wait() 方法时, 线程必须要持有被调用对象的锁,当 wait() 方法后,线程就会释放掉该对象的锁 。 换言之就原创 2021-02-23 17:17:03 · 313 阅读 · 5 评论 -
线程池 Executor 最详细理解
小编写博客不容易,转载请注明出处小编写博客不容易,转载请注明出处前言:对于线程池它起到的作用我相信大家都或多或少有所了解了。它本身核心的作用就是对线程有一个Pool 池化作用可以维护着多个线程,这些线程能够在我们整个程序的运行期间呢线程可以复用。线程本身虽然是轻量级的,但是线程创建、销毁过程也是需要消耗资源的。正文最顶层的是 Executor 这个接口,在jdk 1.5 版本引入进来的,它java.util.concurrent包中,它里面就唯独只有一个方法 execute,没有返回值Exec原创 2021-02-02 16:49:30 · 397 阅读 · 5 评论 -
AbstractQueuedSynchronizer理解以及ReentrantLock和ReentrantReadWriteLock锁对AQS的实现
AQS整体架构与设计原则分析AbstractQueuedSynchronizer(抽象的队列同步器),它是一个抽象类,所以一般使用它的时候都是写一个类来继承。它大部分代码都是基于Java来实现的。本质上,AQS的与Synchronized在底层上的实现相似度能达到80%以上。synchronized 是独占锁,当一个线程获取到这把锁以后,其他线程无法获取到,只有等这个线程退出,释放掉锁之后,才能获取。AQS的某些子类的实现,实现了读写锁的分离。对于一些数据的读取,我们对它上锁是没有必要的,这种锁我们称原创 2021-01-22 17:06:32 · 215 阅读 · 0 评论