多线程与JUC
文章平均质量分 77
并发编程相关
欲无缘
Java后端开发 陆续分享后端分布式、中间件、 服务器运维、云原生、前端、移动开发、大数据等相关知识。
展开
-
深入理解CAS
CAS(Compare-And-Swap),字面意思 “比较并交换”。CAS相较于互斥锁是一种轻量级锁,并且是一种乐观锁。原创 2023-01-10 17:54:40 · 621 阅读 · 0 评论 -
volaile关键字详解!
volatile是一个Java关键字volatile是Java虚拟机提供的轻量级的同步机制volatile修饰符适用于以下场景:某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值,比如booleanflag;或者作为触发器,实现轻量级同步。volatile属性的读写操作都是无锁的,它不能替代synchronized,因为它没有提供原子性和互斥性。因为无锁,不需要花费时间在获取锁和释放锁_上,所以说它是低成本的。原创 2023-01-06 16:17:36 · 231 阅读 · 0 评论 -
Java内存模型(JMM)详解!
JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JMM可以理解为是一个规范,一个抽象概念,并不真实存在。原创 2023-01-03 15:36:27 · 1470 阅读 · 3 评论 -
如何使用阻塞队列BlockingQueue
阻塞队列本质上还是一种队列,遵循先进先出,后进后出的原则,在此基础上,如果出队时阻塞队列为空,则会使当前线程陷入阻塞,直到入队新元素时通知线程继续执行,如果入队时阻塞队列为满,则会使当前线程陷入阻塞,直到出队旧元素时才通知线程进行执行。原创 2022-12-29 14:24:26 · 374 阅读 · 1 评论 -
CountDownLatch/CyclicBarrier/Semaphore的使用
Semaphore翻译过来是信号量的意思,它的作用是控制多个线程对同一个资源的访问线程数量。CyclicBarrier是一个可循环的屏障,它允许多个线程在执行完相应的操作后彼此等待共同到达一个point,等所有线程都到达后再继续执行。每次有线程调用 countDown() 数量-1,假设计数器变为0,countDownLatch.await() 就会被唤醒,继续执行!CountDownLatch是一个倒数的计数器阀门,初始化时阀门关闭,指定计数的数量,当数量倒数减到0时阀门打开,被阻塞线程被唤醒。原创 2022-12-29 13:04:49 · 82 阅读 · 0 评论 -
多线程场景下集合的线程安全问题
CopyOnWrite 写入时复制 COW 计算机程序设计领域的一种优化策略多个线程调用的时候,list,读取的时候,固定的,写入(覆盖)在写入的时候避免覆盖,造成数据问题!原创 2022-12-29 09:46:44 · 37 阅读 · 0 评论 -
JUC关于锁的8个问题
八锁现象主要是指 八种锁的情况,掌握了这八种情况我们以后碰到锁就能明白锁锁的是谁了锁是一种将资源私有化的的方式,在java中就是让某个类、变量、方法在同一个时刻只能被一个线程使用,保证数据的安全性,只要当使用锁的线程释放了这个锁,其它线程才能获取使用。到此为止关于8锁的问题已经分享完毕啦,其实八锁就是关于锁的在不同情况下输出结果的问题,搞懂了锁的是对象还是类模板的话我们就能清晰地知道输出以及运行的情况是怎样的。转载 2022-12-23 15:30:31 · 108 阅读 · 0 评论 -
JUC解决生产者消费者问题
JUC指的就是java.util工具包的简称。原创 2022-12-22 14:23:33 · 53 阅读 · 0 评论 -
关于Fork/Join框架
串行流相当于单线程,并行就是把一个内容分成多个数据块,同时处理每个数据块的流。相比较串性的流可以很大程度上提交执行效率数据量小的情况下,串行效率高于并行,数据量大情况下,并行效率高于串行。Fork/Join框架是一个可以用于并行执行任务的框架,就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行join汇总。............原创 2022-07-21 14:09:13 · 143 阅读 · 0 评论 -
Java中如何使用线程池
Ta是一种标准的资源池模式将资源的创建和销毁都委托给资源池完成 用户只需要关注取得资源之后自己的核心操作提前预留活跃资源 在用户需要的时候 能够第一时间满足用户对资源的需求 从而让用户感受很好。原创 2022-12-21 14:37:03 · 472 阅读 · 0 评论 -
关于对死锁的理解
所谓死锁,是指互斥锁标记使用不当造成多个线程,相互持有对方想要申请的资源,不释放的情况下又去主动申请对方已经持有的资源从而双双进入对方持有资源的锁池当中 产生永久的阻塞 - 死锁 DeadLock。原创 2022-12-21 08:58:32 · 1367 阅读 · 0 评论 -
使用synchornized和ReentrantLock来解决并发错误
多个线程共享操作同一个对象的时候,线程体当中连续的多行操作未必能够连续执行 很可能操作只完成了一部分,时间片突然耗尽,此时,另一个线程抢到时间片,直接拿走并访问了操作不完整的数据(操作不完整的数据,从逻辑上讲是错误数据)。原创 2022-12-17 15:30:26 · 548 阅读 · 0 评论 -
线程类的一些常用方法
setName() getName() : 设置和得到线程的名字static activeCount() : 得到程序当中所有活跃线程的总数 ()setDaemon() : 设置线程成为守护线程interrupt() : 中断 打断 线程的阻塞状态static currentThread() : 得到正在运行状态的那个线程对象~关于CountDownLatch原创 2022-09-01 16:40:55 · 169 阅读 · 0 评论 -
如何控制线程的执行
时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。 线程章节所有主动进入阻塞状态的方法 都需要进行异常处理因为Ta们都有throws InterruptedException的声明 而这时一个非运行时异常 必须处理 线程章节所有的静态方法 不要关注谁调用方法 而要关注调用出现在谁的线程体当中 出现在哪个线程体当中 就是操作哪个线程 可选范围1-10 默认优先级为5线程优先级越高 代表抢到时间片的概率越高~stati原创 2022-09-01 11:57:32 · 259 阅读 · 0 评论 -
多线程基本概念以及如何实现多线程
处于运状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入就绪状态才有机会被CPU选中再次执行。run()是程序的核心逻辑,是抢到时间片要执行的操作,直接调用run()不会创建线程 只会当做普通的方法调用。因为CPU的执行速率是纳秒级别的,甚至是跟高效,超过了人的反应速度,是的各个进程看起来是。串行:同一时刻CPU只能处理一件事,例如你正在吃饭,突然电话响了,你停止吃饭去接电话。当CPU调度了处于就绪状态的线程时,此线程才是真正的执行。当线程创建后就进入了新生状态。..原创 2022-09-01 10:44:11 · 260 阅读 · 0 评论