并发
文章平均质量分 88
皮皮杨233
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
升级为重量级锁,锁重入会导致锁释放?
近日,看到有些文章说“产生竞争时,轻量级锁升级为重量级锁,此时持锁线程执行CAS操作(锁重入)会失败,所以将会提前释放锁”首先,持锁线程可能连同步块都未执行完成就平白无故将锁释放掉,怎么想都不合理接下来的实验将证明上述“提前释放锁”结论的错误性实验结果表明,即使锁已经升级为重量级锁,持锁线程执行锁重入操作并未发生阻塞,所以也就不存在释放锁一说锁已经升级,但是持锁线程可能确实并不知情,本人猜测在锁重入或者解锁时发现已经升级为重量级锁httpshttps。.........原创 2022-07-16 11:34:25 · 418 阅读 · 1 评论 -
并发编程 synchronized (四) 深入分析线程安全
常见线程安全类String Integer StringBuffer Random Vector Hashtable java.util.concurrent 包下的类线程安全类也会线程不安全如:Vectorpublic synchronized int size() { // 返回大小 return elementCount;}public synchronized E remove(int index) { // 移除操作 .原创 2021-08-09 22:04:54 · 157 阅读 · 0 评论 -
并发编程 synchronized (七) wait / notify
目录wait / notify介绍wait 与 sleep 对比保护性暂停(join 原理)定义实现join 实现(带超时的 Guarded Object)生产者/消费者定义实现wait / notify介绍① wait:当 Thread3、Thread4 获得锁时,由于没有达到执行条件(Thread3 要锤子,Thread4 要扳手);于是调用 wait,进入左边 WaitSet 等待(等人送工具,没人送会一直等)② notif...原创 2021-08-13 19:32:31 · 486 阅读 · 1 评论 -
HashMap1.7 扩容时产生死链
HashMap1.7 扩容机制HashMap1.7 扩容机制:当 put 一个新键值对时;发生了哈希碰撞(hash值相同)并且加上新键值对后,键值对总数达到了阈值(容量 * 0.75)① 如:容量为 16 的HashMap,每个位置都放了一个键值对;它并不会扩容,因为没有发生哈希碰撞② 提问:容量为 16 的HashMap,最多可以放多少个键值对?答:26个在 0 号位置先加入 11 个键值对(其他位置都可以),然后将剩余空位置填满;结果为 11+15=26;假如再 put 一个新键值原创 2021-08-07 18:13:32 · 1174 阅读 · 0 评论 -
并发编程 synchronized (一) 初识
上下文切换对非原子操作的影响示例我们都知道,两个线程 Thread0 与 Thread1,对同一个量 count 进行操作;一个让其自增,一个让其自减,次数相等;结果可能为 负数、正数、0(极少)示例代码:package com.juc.ppy.synchronize;import lombok.extern.slf4j.Slf4j;@Slf4j(topic = "c.UnsafeCount")public class UnsafeCount { static in.原创 2021-08-08 19:34:46 · 264 阅读 · 1 评论 -
并发编程 synchronized (六) 偏向锁
偏向锁用途public void method1(){ synchronized(object){ method2(); }}public void method2(){ synchronized(object){ method3(); }}public void method3(){ synchronized(object){ // 执行代码 }}没有线程竞争时,持锁线程反复获取锁原创 2021-08-11 22:51:05 · 449 阅读 · 0 评论 -
并发编程 synchronized (三) 变量是否线程安全
目录线程安全情况单线程操作变量多个线程对变量只读 或者 变量不属于共享资源线程不安全情况多线程对变量既读又写子类重写父类方法执行未知操作变量:普通成员变量、静态成员变量、局部变量① 变量不属于多线程共享资源或者不被多线程共享,则线程安全② 变量被线程共享;但是只有读操作,不包含任何写(修改)操作;则线程安全线程安全情况单线程操作变量@Slf4j(topic = "c.SafeThread")public class SafeThread { ...原创 2021-08-09 17:07:05 · 319 阅读 · 0 评论 -
volatile(二)模式与规则
两阶段终止说明Two Phase Termination 在线程 t1 中优雅地终止线程 t2错误方法:① 使用线程对象的 stop 方法,会真正杀死线程,但是线程持有锁的话,它就无法释放,其他线程也就无法获得锁② System.exit(int) 会将整个进程杀死利用共享标记打断@Slf4j(topic = "c.TwoPhaseTermination")public class TwoPhaseTermination { private Thread t..原创 2021-08-23 19:31:38 · 395 阅读 · 0 评论 -
并发编程 synchronized (五) 重量级锁、轻量级锁
目录Monitor(重量级锁)对象头组成工作机制轻量级锁加锁过程锁重入锁膨胀(转为重量级锁)自旋Monitor(重量级锁)对象头每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级锁)之后,在该对象头的 Mark Word 中设置指向该 Monitor 的指针Mark Word(64 位)锁不同时,Mark Word 会发生变化Klass Word 指向该对象的类型...原创 2021-08-10 21:52:42 · 459 阅读 · 0 评论 -
并发编程 synchronized (二) 两种锁
对象锁定义形如:synchronized void method(){ // 在普通成员方法上加锁 // 临界区}void method(){ synchronized(this){ // 锁住当前对象 // 临界区 }}两种方式的临界区,对于同一个对象是等效的对象锁例子在普通方法上加锁(相同对象调用相同方法)package com.juc.ppy.synchronize;import lombok.extern.slf原创 2021-08-09 11:51:56 · 491 阅读 · 0 评论 -
线程状态转换
目录总览各种情况情况 1:新建线程情况 2:永久等待情况 3:等待其他线程情况 4:park && unpark情况 5:有时限等待情况 6:有时限等待其他线程情况 7:睡眠情况 8:有时限 park情况 9:竞争锁情况 10:运行完毕总览各种情况情况 1:新建线程NEW --> RUNNABLE调用 t.start()情况 2:永久等待RUNNABLE <--> WAITING线原创 2021-08-18 22:04:28 · 137 阅读 · 0 评论 -
线程活跃性 && ReentrantLock
目录线程活跃状态死锁活锁饥饿ReentrantLock特点特点展示可重入可打断可设置超时时间可设置为公平锁支持多个条件变量解决死锁问题线程活跃状态死锁当一个线程需要同时获取多把锁时,容易发生死锁。@Slf4j(topic = "c.DeadLock")public class DeadLock { public static void main(String[] args) { Object loc...原创 2021-08-19 21:48:25 · 228 阅读 · 0 评论 -
volatile(一)作用与原理
Java 内存模型① JMM(Java Memory Model),定义了主存(共享)、工作内存(私有)抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等② JMM 体现在以下几个放面(并发安全也如此): 2.1 原子性:保证指令不受到线程上下文切换影响(指令交错) 2.2 可见性:保证指令不受CPU 缓存影响 2.3 有序性:保证指令不受 CPU 指令并行优化影响(指令重排)可见性退不出的循环 static ...原创 2021-08-22 19:09:06 · 593 阅读 · 0 评论 -
秒杀重点(后端)
目录1.tomcat 线程池参数优化2.分布式 nginx 反向代理3.数据库分服务器4.多级缓存(查询)5. nginx lua(最前置热点缓存)6. 消息中间件(抢单)7.流量削峰8.防刷限流1.tomcat 线程池参数优化① 最大连接数 ② 超时时间2.分布式 nginx 反向代理① 多服务器,分布式分流3.数据库分服务器① MySQL(索引优化,字段分表减少锁竞争) ② redis4.多级缓存(查询)① redi.原创 2022-02-15 16:10:29 · 1168 阅读 · 3 评论 -
线程池原理
目录属性核心属性阻塞队列饱和策略状态属性状态分类状态转换新增任务处理流程属性核心属性int corePoolSize:核心线程数量 int maximumPoolSzie:最大线程数量 long keepAliveTime:非核心线程的最大空闲等待时间 boolean allowCoreThreadTimeOut:核心线程也使用最大空闲等待时间;默认 false BlockingQueue<Runnable> workQueu..原创 2022-01-20 19:35:23 · 895 阅读 · 0 评论 -
ConcurrentHashMap 1.7 & 1.8
juc重点原创 2021-12-15 22:15:29 · 1020 阅读 · 0 评论
分享