
多线程
文章平均质量分 94
所为xy
这个作者很懒,什么都没留下…
展开
-
JUC提供的并发容器
原创 2020-06-01 20:02:52 · 175 阅读 · 0 评论 -
CyclicBarrier实现原理核心逻辑
CyclicBarrier作用:CyclicBarrier用于同步一组线程,创建CyclicBarrier时指定参与循环栅栏的线程数量与一组线程全部就位时,优先执行的动作。 每个线程调用await()方法后,即表示到达栅栏点,然后就会进阻塞,当参与循环栅栏的最后一个线程调用了await()方法后,会唤醒之前阻塞的线程,循环栅栏重置,进入下一次循环。CyclicBarrier字段解释: // 表示本次循环的状态:为true时,表示本次循环被破坏(如,有线程被中断、await超时) private st原创 2020-06-01 19:08:29 · 237 阅读 · 0 评论 -
总结AQS的实现原理(state状态变量、同步队列、Condition等待队列)
一、 总体思想:通过尝试获取共享变量 state 的结果来对线程的状态作出处理。获取成功的线程CAS修改state的之后直接进行自己的处理。未能成功获取共享变量的线程会被封装成结点放入 一个队列中,然后 自旋的检查自己的状态,看是否能再次去获取state资源,获取成功则退出当前自旋状态,获取失败则找一个安全的点(成功的找到一个状态<0前驱结点,然后将其状态设置为SIGNAL),调用LockSupport.park()方法进入waiting状态。然后等待被前驱结点调用release方法(实际上是调原创 2020-05-30 21:47:24 · 4069 阅读 · 0 评论 -
线程池精选文章汇总,个别点补充
1. 核心线程的创建:当向线程池提交一个任务时,判断是否还能创建新的核心线程来执行该任务,能的话创建一个新的核心线程,不能的话放入任务等待队列。 注意:这里就算有核心线程是空闲状态,当能创建核心线程时,还是会创建,而不是拿一个空闲的核心线程来执行。空闲的核心线程会不断扫描等待任务队列,从队列里拿到任务然后进行执行。2.自定义拒绝策略:希望自定义局决策落时,实现RejectedExecutionHandler接口。3.关闭线程池:调用shutdowm后,关闭线程池,线程池的状态变为 SHUTDOW原创 2020-05-29 20:56:05 · 160 阅读 · 0 评论 -
偏向锁、轻量级锁
偏向锁:线程执行同步代码块时,首先检查JVM是否开启了偏向锁(1.6后默认是开启的),未开启的执行轻量级锁的流程。**开启的话:**检查对象MarkWord中的偏向线程ID是否是当前线程,是的话,执行同步代码块。**若对象MarkWord的偏向线程ID不是当前线程ID **,则证明已经有线程已经持有了偏向锁。此时使用CAS尝试获取获取,获取成功执行同步代码。未获取到偏向锁的线程会在达到安全点时,暂停已经获取到偏向锁的线程,并将锁升级到 轻量级锁。升级以后,唤醒刚才被停止的持有偏向锁的线程(升级后现在是持原创 2020-05-28 20:32:04 · 137 阅读 · 0 评论 -
J.U.C中的Lock接口
一、简单介绍Lockj.u.c中提供了Lock接口,该接口与synchronized一样,可以保证程序并发访问的互斥性。这里简单介绍下Lock与synchronized的区别:synchronized是隐式获取锁的,经过编译器编译后,会在同步代码块起始处加入monitorenter指令,在结束处加入monitorexit指令。而Lock是显式的有程序员自己进行加锁与解锁操作;Lock的加...原创 2020-05-02 19:06:29 · 247 阅读 · 0 评论 -
生产者-消费者(等待-通知)模式的标准范式
一、说明:所谓范式,指的就是某个领域的一个通用的、合理的问题解决模板。对于常见的生产者-消费者模式,实现方式有很多,但抛开实现手段来说,他的处理方式可以抽象成下面的范式。二、描述:获取锁 { while(条件不满足) { 对象.wait(); } 对应的处理逻辑 }释放锁...原创 2020-05-02 14:36:07 · 300 阅读 · 0 评论