
并发编程
文章平均质量分 87
并发编程学习
lxtx-0510
这个作者很懒,什么都没留下…
展开
-
【并发编程】ConditionObject
ReentrantLock 提供了同synchronized(wait 和 notify)类似的功能 ,await及signal想要执行await 和 signal ,必须先要有lock锁资源System.out.println("子线程获取锁资源并await挂起线程");try {try {System.out.println("子线程挂起后被唤醒!持有锁资源");}).start();原创 2024-02-12 21:05:00 · 1059 阅读 · 0 评论 -
【并发编程】锁-源码分析
/ 释放锁资源不分为公平锁和非公平锁,都是一个sync对象// 释放锁的核心流程// 核心释放锁资源的操作之一// 如果锁已经释放掉了,走这个逻辑// h不为null,说明有排队的(录课时估计脑袋蒙圈圈。// 如果h的状态不为0(为-1),说明后面有排队的Node,并且线程已经挂起了。if (h!= 0)// 唤醒排队的线程// ReentrantLock释放锁资源操作// 拿到state - 1(并没有赋值给state)原创 2024-02-10 21:48:11 · 533 阅读 · 0 评论 -
【并发编程】锁
乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。在 Java中 java.util.concurrent.atomic 包下面的原子变量类就是使用了乐观锁的一种实现方式 CAS 实现的。总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁,就是在做操作之前先上锁。原创 2024-01-13 11:42:28 · 985 阅读 · 1 评论 -
【并发编程】并发编程的三大特性
可见性问题是基于CPU位置出现的,CPU处理速度非常快,相对CPU来说,去主内存获取数据这个事情太慢了,CPU就提供了L1,L2,L3的三级缓存,每次去主内存拿完数据后,就会存储到CPU的三级缓存,每次去三级缓存拿数据,效率肯定会提升。这就带来了问题,现在CPU都是多核,每个线程的工作内存(CPU三级缓存)都是独立的,会告知每个线程中做修改时,只改自己的工作内存,没有及时的同步到主内存,导致数据不一致问题。// ....System.out.println("t1线程结束");});原创 2024-01-06 00:25:16 · 907 阅读 · 0 评论 -
【并发编程】线程基础
线程是CPU调度的基本单位,每个线程都是执行一个进程中的某一块代码程序片段。进程多线程是指:一个进程内运行的多个线程,多线程的目的是为了提高CPU的利用率,用以提升程序的执行效率,提高用户体验。串行就是从头到尾一个一个的顺序执行并行就是同时处理这里的并发并不是指三高中的并发问题,是指多线程中的并发概念(CPU调度线程的概念),CPU在极短的时间内,反复切换执行不同的线程,看起来好像在并行。原创 2023-12-17 22:33:50 · 1181 阅读 · 0 评论