多线程高并发
@龙猫
写代码是每天最重要的小事
展开
-
Java中的CAS理解
Java中的CAS理解CAS是什么?CAS能做什么?CAS在java中的应用CAS有没有什么不好的隐患呢?1、首先就是经典的ABA问题2、长时间自旋非常消耗资源3、只能保证一个共享变量的原子操作。在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致原创 2020-05-17 17:41:19 · 2277 阅读 · 2 评论 -
synchronized与Lock的区别比较
synchronized与Lock的区别比较1、synchronized 是Java内置的关键字,使用后会自动释放锁,Lock是java.util.concurrent.Locks 包下的一个接口,必须要手动释放。特别是在发生异常时,需要在 finally 块中进行手动释放,否则会发生死锁行为2、Lock可响应中断,而synchronized 不能响应中断,并且Lock提供了更丰富的方法实现;例如Lock() ; //获取锁tryLock(); //获取锁tryLock(long time, T原创 2020-05-16 21:52:41 · 2012 阅读 · 0 评论 -
syncronized底层实现原理及相关优化
syncronized底层实现原理及相关优化实现原理Java对象头、monitorJava对象头monitor锁优化自旋锁适应自旋锁锁消除锁粗化轻量级锁释放锁偏向锁重量级锁记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我原创 2020-05-16 12:50:33 · 1958 阅读 · 0 评论 -
Java中锁的分类
Java中锁的分类1、可重入锁/不可重入锁2、可中断锁3、公平锁/非公平锁4、独享锁(互斥锁)/共享锁(读写锁)5、乐观锁/悲观锁6、分段锁7、偏向锁/轻量级锁/重量级锁8、自旋锁先来一段很常见的死锁代码:class Deadlock { public static String str1 = "str1"; public static String str2 = "str2"...原创 2020-04-12 17:55:33 · 3425 阅读 · 0 评论 -
对象锁和类锁的区别
对象锁和类锁的区别synchronized 关键字对象锁1、锁住 this 对象2、 锁住实体里的非静态变量3、直接锁非静态方法对象锁代码测试类锁1、锁住 xxx.class2、锁住类中的静态变量3、直接在静态方法上加 synchronized类锁代码测试总结生活中不存在绝对的自由,绝对的自由通常对应的无序和混沌,只有在道德、法律、伦理的约束下的相对自由,才能使人感受到自由。而在多线程编程中,...原创 2020-04-12 16:47:25 · 4734 阅读 · 0 评论 -
ArrayList线程不安全举例及解决
ArrayList部分源码public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ /** * 列表元素集合数组 * 如果新建ArrayLi...原创 2019-09-05 09:27:39 · 7680 阅读 · 0 评论 -
接口幂等性问题处理(分布式锁)
接口幂等性问题处理理论幂等性概念幂等性场景实践利用redis加锁代码实现利用Redisson高性能分布式锁代码实现(AOP实现)添加maven依赖RedissionConfig配置类:定义注解类注解业务实现类:controller层使用注解测试日志打印如下理论幂等性概念一个幂等操作的特点是任意执行多少次与执行一次产生的影响都是一样的。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获...原创 2019-09-10 13:42:05 · 9551 阅读 · 0 评论