
3、java并发
文章平均质量分 80
juc多线程
shining曙光
这个作者很懒,什么都没留下…
展开
-
java并发-7AQS原理
AQS原理1. 概述1)AbstractQueuedSynchronizer用来构建锁或者其它同步器组件的重量级基础框架, 通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int变量表示持有锁的状态2)特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state原创 2021-03-21 20:45:29 · 138 阅读 · 0 评论 -
java并发1--多线程基础
cas线程获取的值和共享变量的值是否一样(工作内存和主内存),一样才操作.compareAndSet。这个只比较了是否一致,但是不能判断是否被修改过(ABA)–P120sleep(long n) 和 wait(long n) 的区别sleep 是 Thread 方法,而 wait 是 Object 的方法sleep 不需要强制和 synchronized 配合使用,但 wait 需要和 synchronized 一起用sleep 在睡眠的同时,不会释放对象锁的,但 wait 在等待的时候会释原创 2020-12-22 22:15:17 · 178 阅读 · 0 评论 -
java并发2--JUC并发原理
1、内存屏障2、volatile原理3、final原理String时保护性拷贝模式。但这样会大量创建对象,使用享元模式处理。比如大数类,本身通过保护性拷贝,达到了单个原子性,线程安全。但是在取款例子的方法中,获取-计算-设之,这几步还是分开的,不能保证原子性和线程安全。写:final 变量的赋值也会通过 putfield 指令来完成,同样在这条指令之后也会加入写屏障,保证在其它线程读到它的值时不会出现为 0 的情况.读:复制一份,,效率比不带final高。数字小复制在栈中,数字大,赋值在常原创 2020-12-22 22:15:30 · 134 阅读 · 0 评论 -
java并发3-Synchronized|ReentrantLock|锁优化
对象头上的标记位替换,类似于火车硬卧换票,等解锁(下车)时,再把栈帧中的hash码等还原回来。Java HotSpot 虚拟机中,每个对象都有对象头(包括 class 指针和 Mark Word)。Mark Word 平时存储这个对象的 哈希码 、分代年龄 ,当加锁时,这些信息就根据情况被替换为 标记位 、 线程锁记录指针 、 重量级锁指针 、 线程 ID 等内容...原创 2020-12-19 14:01:38 · 179 阅读 · 0 评论 -
java并发4--阻塞队列和线程池
阻塞队列线程池涉及的设计模式享元模式(池的概念)策略模式(拒绝策略)装饰者模式(signle池返回的是包装类而不是pool本身,防止调用者修改核心线程数–对比fixpool)正确处理执行任务异常方法1:主动捉异常方法2:使用 FutureFork/Join概念Fork/Join 是 JDK 1.7 加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的 cpu 密集型运算所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。跟递归相关的一原创 2020-12-22 22:15:46 · 238 阅读 · 0 评论 -
java并发5--并发工具(辅助类|集合类)
一、Semaphore 信号量1、定义用来限制能同时访问共享资源的线程上限。比喻为停车位,车位占用则不能使用,得等上一辆车开走,释放资源。(类似于能允许存在多个锁)类似于之前的notify和wait。是经过封装的高级api,用起来更简单2、应用单机版、当许可数(资源线程上限)==资源数时,更适合用3、原理核心是继承了AQS.使用其中的states来存放允许的线程数。每消耗一个许可,则减一。释放一个许可则加一二、CountdownLatch1、定义用来进行线程同步协作,等待所有线程完原创 2020-12-21 23:15:53 · 226 阅读 · 0 评论 -
java并发6-ThreadLocal实现分析
一、ThreadLocal的实现原理1、ThreadLocal特性一个线程可以有多个ThreadLocal对象(一般用一个),多个ThreadLocal对应同一个ThreadLocalMap。ThreadLocalMap本质是一个entry的数组。下面的A和B对应同一个map的不同entry数组下标。ThreadLocal sThreadLocalA = new ThreadLocal();ThreadLocal sThreadLocalB = new ThreadLocal();ThreadL原创 2020-12-07 17:13:06 · 395 阅读 · 0 评论