![](https://img-blog.csdnimg.cn/direct/8225b974510947fcab5940fa07da7194.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC并发编程与源码分析
JUC并发编程与源码分析
ZHOU_VIP
这个作者很懒,什么都没留下…
展开
-
ThreadLocal-阿里规范对ThreadLocal要求
【代码】ThreadLocal-阿里规范对ThreadLocal要求。原创 2024-03-17 23:21:27 · 108 阅读 · 0 评论 -
ThreadLocal-案例编码实战
需求变更:希望各自分灶吃饭,各凭销售本事提成,按照出单数各自统计-------比如房产中介销售。问题描述:5个销售买房子,集团只关心销售总量的准确统计数,按照总销售额统计,方便集团公。司给部分发送奖金--------群雄逐鹿起纷争------为了数据安全只能加锁。都有自己的销售额指标,自己专属自己的,不和别人参和。----人手一份天下安。因为每个Thread内有自己的实例副本且该副本只有当前线程自己使用。统一设置初始值,但是每个线程对这个值得修改都是各自线程互相独立得。原创 2024-03-17 22:26:43 · 66 阅读 · 0 评论 -
ThreadLocal-是什么、能干嘛
原创 2024-02-08 20:51:04 · 81 阅读 · 0 评论 -
原子类-LongAdder源码分析、sum()方法
总结:原创 2024-01-29 23:42:06 · 100 阅读 · 0 评论 -
原子类-LongAdder源码分析、add()方法
源码:原创 2024-01-28 23:24:18 · 84 阅读 · 0 评论 -
原子类-LongAdder高性能原理说明
总结:原创 2024-01-25 22:56:18 · 54 阅读 · 0 评论 -
原子类-LongAdder源码分析前置知识
原创 2024-01-24 00:02:31 · 61 阅读 · 0 评论 -
原子类-高性能热点商品点赞计数案例
热点商品点赞计算器,点赞数加加统计,不要求实时精确原创 2024-01-21 23:01:15 · 97 阅读 · 0 评论 -
原子类-原子操作增强类理论入门、LongAdder和LongAccumulator简介
原子类之LongAdder和LongAccumulator简介。原创 2024-01-21 22:28:47 · 132 阅读 · 0 评论 -
原子类-对象的属性修改原子类理论、对象的属性修改原子类案例
AtomicIntegerFieldUpdater使用案例。以一种线程安全的方式操作非线程安全对象内的某些字段。对象的属性修改原子类。原创 2024-01-16 23:01:07 · 80 阅读 · 0 评论 -
原子类-引用类型原子类
该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。AtomicMarkableReference与AtomicStampedReference一样也可以解决ABA的问题,两者。AtomicMarkableReference是通过boolean型的标识来判断数据是否有更改过。唯一的区别是,AtomicStampedReference 是通过int类型的版本号,而。业务场景中,不关心引用变量被修改了几次,只是单纯的关心是否更改过。原创 2024-01-16 22:01:27 · 85 阅读 · 0 评论 -
原子类-数组类型原子类
AtomicIntegerArray案例演示。数组类型原子类常用API简介。原创 2024-01-15 23:16:18 · 69 阅读 · 0 评论 -
原子类-入门介绍和分类说明、基本类型原子类、Join和CountDownLatch都可以让一个线程等待子线程完成
Atomic翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学。反应中是不可分割的。在我们这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执。方法一:加时间,等待其他线程执行完,练习可以使用,实际开发不可以用,时间不好确定。结果出乎意料,不是50000,说明其他线程没有结束,main线程就打印了。行的时候,一个操作一旦开始,就不会被其他线程干扰。方法二:thread.join()等待子线程跑完。方法三:CountDownLatch。基本类型原子类常用API简介。原创 2024-01-14 23:11:27 · 306 阅读 · 0 评论 -
CAS-ABA问题编码实战
多线程情况下演示AtomicStampedReference解决ABA问题。一句话总结:比较加版本号一起上。原创 2024-01-11 23:07:45 · 130 阅读 · 0 评论 -
自旋锁和互斥锁的区别
自旋锁和互斥锁的区别_自旋锁和互斥锁有什么区别?-CSDN博客原创 2024-01-11 22:52:22 · 92 阅读 · 0 评论 -
CAS-两大缺点、AtomicStampedReference入门
AtomicStampedReference带戳记流水的简单演示(单线程)1、循环时间长开销很大。版本号时间戳原子引用。原创 2024-01-02 21:52:09 · 424 阅读 · 0 评论 -
Java多线程计数
原创 2023-12-30 00:06:02 · 425 阅读 · 0 评论 -
CAS-手写自旋锁补充、thread.join()等待子线程执行完
等待多个线程执行完成后再运行的几种方式。原创 2023-12-30 00:04:01 · 422 阅读 · 0 评论 -
CAS-手写自旋锁
CAS是实现自旋锁的基础,CAS利用CPU指令保证了操作的原子性,以达到锁的效果,至于自旋。所谓自旋锁就是通过while循环实现的,让拿到锁的线程进入临界区执行代码,让没有拿到锁的线。CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程。锁,当线程发现锁被占用时,会不断循环判断锁的状态,直到获取。获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-程不会造成干扰的情况下执行,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。原创 2023-12-27 23:17:33 · 413 阅读 · 0 评论 -
CAS-原子引用AtomicReference
原子引用原创 2023-12-27 21:53:51 · 343 阅读 · 0 评论 -
CAS-Unsafe类底层汇编源码分析
源码分析: 底层汇编:cmpxchg底层:cmpxchg即比较并交换指令总结:原创 2023-12-25 21:53:08 · 447 阅读 · 0 评论 -
CAS-源码分析引出Unsafe类、Unsafe类详解
问题:我们知道i++是线程不安全的,那AtomicInteger.getAndIncrement()如何保证原子性?Unsafe类是CAS的核心类,由于Java方法无法直接访问底层系统,需要通过本地(native)方法来。注意:Unsafe类中的所有方法都是native修饰的,也就是说Unsafe类中的所有方法都直接调用操作。sun.misc包中,其内部方法操作可以像C的指针一样直接操作内存,因此Java中CAS操作的执行依。访问,Unsafe相当于一个后门,基于该类可以直接操作特定内存的数据。原创 2023-12-20 22:13:36 · 443 阅读 · 0 评论 -
CAS-原理简介
CAS(compare and swap),中文翻译为比较并交换,实现并发算法时常用到的一种技术,用于保。多线程环境中使用原子类保证线程安全i++(基本数据类型)---------->类似于乐观锁。证共享变量的原子性更新,它包含三个操作数---内存位置、预期原值与更新值。多线程环境中不使用原子类保证线程安全i++(基本数据类型)原创 2023-12-19 22:09:19 · 413 阅读 · 0 评论 -
volatile-之小总结
凭什么我们Java写了一个volatile关键字,系统底层加入内存屏障?两者的关系如何勾搭?是一种屏障指令,它使得CPU或编译器对屏障指令的前和后所发出的内存操作执行一个排序的约。读操作时加入屏障,线程私有工作内存的数据失效,重新回到主物理内存中获取最新值。volatile写之前的操作,都禁止重排序到volatile之后。volatile读之后的操作,都禁止重排序到volatile之前。写操作时加入屏障,强制将线程私有工作内存的数据刷回主物理内存。volatile写之后volatile读,禁止重排序。原创 2023-11-30 20:58:09 · 435 阅读 · 0 评论 -
volatile-日常使用场景
原理是:利用volatile保证读操作的可见性,利用synchronized保证符合操作的原子性。作为一个布尔状态标志,用于指示发生了一个重要的一次性事件,例如完成初始化或任务结束。当读远多于写,结合使用内部锁和volatile变量来减少同步的开销。问题描述:首先设定一个加锁的单例模式场景。原创 2023-11-06 23:32:43 · 154 阅读 · 0 评论 -
volatile-禁重排案例详解
在每一个volatile写操作前面插入一个StoreStore屏障--->StoreStore屏障可以保证在volatile写之前,其前面所有的普通写操作都已经刷新到主内存中。在每一个volatile写操作后面插入一个StoreLoad屏障--->StoreLoad屏障的作用是避免volatile写与后面可能有的volatile读/写操作重排序。在每一个volatile读操作后面插入一个LoadLoad屏障--->LoadLoad屏障用来禁止处理器把上面的volatile读与下面的普通读重排序。原创 2023-11-05 23:01:48 · 222 阅读 · 0 评论 -
volatile-无原子性案例详解
【代码】volatile-无原子性案例详解。原创 2023-11-05 20:31:55 · 135 阅读 · 0 评论 -
volatile-可见性案例详解
保证不同线程对某个变量完成操作后结果及时可见,即该共享变量一旦改变所有线程立即可见。不加volatile,没有可见性,程序无法停止。加了volatile,保证可见性,程序可以停止。原创 2023-10-23 22:55:42 · 254 阅读 · 0 评论 -
volatile-读写屏障插入策略
读屏障:写屏障:原创 2023-10-23 22:24:11 · 144 阅读 · 0 评论 -
volatile-两大特性(可见性、有序性)、内存屏障
【代码】volatile-两大特性(可见性、有序性)、内存屏障。原创 2023-10-18 23:13:50 · 335 阅读 · 0 评论 -
JMM-多线程先行发生原则happens-before
方法一:把getter/setter方法都定义为synchronized方法------->不好,重量锁,并发性下降。方法二:把Value定义为volatile变量,由于setter方法对value的修改不依赖value的原值,满足。在JVM中,如果一个操作执行的结果需要对另一个操作可见或者代码重排序,那么这两个操作之间。必须存在happens-before(先行发生)原则,逻辑上的先后关系。volatile关键字使用场景。原创 2023-10-18 22:10:47 · 123 阅读 · 0 评论 -
Java内存模型-Java Memory Model(JMM)-可见性、原子性、有序性
每个线程都有自己的工作内存,线程自己的工作内存中保存了该线程使用到的变量的主内存副本拷。写入主内存中的变量,不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递。作内存中进行,首先要将变量从主内存拷贝到线程自己的工作内存空间,然后对变量进行操作,操。作完成后再将变量写回主内存,不能直接操作主内存中的变量,各个线程中的工作内存存储着主内。存中的变量副本拷贝,因此不同的线程无法访问对方的工作内存,线程间的通信(传值)必须通过。指一个操作是不可被打断的,即多线程环境下,操作不能被其他线程干扰。原创 2023-10-17 22:03:32 · 381 阅读 · 0 评论 -
LockSupport-park和unpark编码实战
【代码】LockSupport-park和unpark编码实战。原创 2023-10-16 22:25:07 · 106 阅读 · 0 评论 -
LockSupport-LockSupport是什么及等待唤醒机制对比
LockSupport是用来创建锁和其他同步类的基本线程阻塞原语,其中park()和unpack()而作用分别是。方式二:使用JUC包中的Condition的await()方法让线程等待,使用signal()方法唤醒线程。方式一:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程。方式三:LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程。Condition中的线程等待和唤醒方法,需要先获取锁。必须要先等待后唤醒,线程才能够被唤醒。原创 2023-10-16 21:49:59 · 89 阅读 · 0 评论 -
中断机制-interrupt和isInterrupted源码分析、中断协商案例
如果线程处于阻塞状态(例如sleep,wait,join状态等),在别的线程中调用当前线程对象的interrupt方法,那么线程将立即退出被阻塞状态(interrupt状态也将被清除),并抛出一个InterruptedException异常。如果线程处于正常活动状态,那么会将该线程的中断标志设置为true,仅此而已,被设置中断标志的线程将继续正常运行,不受影响,所以interrupt()并不能真正的中断线程,需要被调用的线程自己进行配合才行,对于不活动的线程没有任何影响。第二种情况线程处于阻塞状态演示。原创 2023-10-15 22:39:30 · 203 阅读 · 0 评论 -
中断机制-通过interrupt实现线程中断停止
通过Thread类自带的中断API实例方法实现----在需要中断的线程中不断监听中断状态,一旦发生中断,就执行相应的中断处理业务逻辑stop线程。原创 2023-10-15 17:29:06 · 111 阅读 · 0 评论 -
中断机制-通过AtomicBoolean实现线程中断停止
通过AutomicBoolean。原创 2023-10-15 14:46:10 · 123 阅读 · 0 评论 -
中断机制-通过volatile实现线程中断停止
通过一个volatile变量实现。如何停止中断运行中的线程?原创 2023-10-15 14:40:53 · 258 阅读 · 0 评论 -
中断机制-中断协商机制、中断方法
若要中断一个线程,你需要手动调用该线程interrupt方法,该方法也仅仅是将该线程对象的中断标识设置为true,接着你需要自己写代码不断检测当前线程的标识位,如果为true,表示别的线程请求这条线程中断,此时究竟应该做什么需要你自己写代码实现。每个线程对象都有一个中断标识位,用于表示线程是否被中断;首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了。原创 2023-10-14 22:06:15 · 253 阅读 · 0 评论 -
多线程锁-死锁案例和排查命令
死锁是指两个或两个以上的线程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外。力干涉,则它们无法再继续推进下去。jstack 进程编号。原创 2023-10-12 23:59:10 · 73 阅读 · 0 评论