多线程高并发
Jiang_WenFeng
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock翻译-snapshot
1.使用场景ReentrantReadWriteLocks可用于提高某些集合的并发性。仅当集合预计很大时,读线程比写线程多,并且需要用超过同步开销的开销时,使用ReentrantReadWriteLocks通常是值得的。2.锁降级获取写锁,然后获取读锁,然后释放写锁。但是,从读锁升级到写锁不可能。3.递归调用注意事项此锁最多支持65535个递归写锁和65535读锁。试图超过这些限制会从锁方法抛出{@link Error}异常。4.{@link Condition}支持..原创 2021-05-18 17:07:37 · 138 阅读 · 0 评论 -
多线程高并发--volatile的使用
1.线程安全3要素:原子性,可见性,禁止指令重排序2.volatile保证线程的可见性,禁止指令重排序3.volatile的一个使用场景:单例的双重检查加锁的实现,不使用volatile时,可能导致单例对象初始化不完整创建对象的过程:package com.test.threadlocal;/** * 创建对象的过程: * 1.在堆里面开辟一块空间创建一个对象,并给变量里面的属性赋初始值,如果是int类型,就会为变量赋值0 * 2.对象的初始化,会把变量的值改为8 *原创 2021-05-11 16:53:33 · 165 阅读 · 0 评论 -
多线程高并发--synchronize的锁不能使用String常量,Integer和Long
可能与别的用到这些对象的地方产生冲突原创 2021-05-11 16:05:05 · 382 阅读 · 0 评论 -
多线程高并发--synchronize的锁升级
1.偏向锁 (只有一个线程使用资源时,不进行升级;有多个线程抢占资源时,升级为自旋锁)--> 自旋锁(等待的线程达到一定的数量会升级为重量级锁) --> 重量级锁(向操作系统申请的锁)。2.用户级别的锁(偏向锁和自旋锁)。3.操作系统内核级别的锁(重量级锁)。...原创 2021-05-11 15:57:13 · 77 阅读 · 0 评论 -
多线程高并发--自旋锁和重量级锁的选择
1.线程数量很多或执行时间很长的代码使用重量级锁2.其他情况使用自旋锁(自旋锁会占用大量的cpu资源)原创 2021-05-11 15:46:17 · 133 阅读 · 0 评论 -
多线程高并发--发生异常会释放锁
package com.test.threadlocal;/** * 发生异常会释放锁 * 实验场景:不进行捕获时,t1执行时发生异常,会释放锁,t2线程会执行; * 对异常进行捕获后,t2线程不会执行 */public class ExceptionReleaseLock implements Runnable{ private int count = 0; public void run() { test(); .原创 2021-05-11 15:40:05 · 171 阅读 · 0 评论