并发
文章平均质量分 68
并发面试相关
qq_41293962
这个作者很懒,什么都没留下…
展开
-
面试系列之阻塞队列(BlockeQuery)
面试系列之阻塞队列(BlockeQuery)ArrayBlockeQuery:底层是数组 加入队和出队双指正的方式形成循环数组,减少数组移动的性能消耗。并且保证先进先出使用一个ReentrantLock加上两个Condition保证线程安全以及阻塞交互。由于入队和出队都使用同一把锁(入队和出队互斥),所以性能相对较低LinkedBlockingQueue底层采用单向链表的结构,head、tail指针,保证先进先出使用两把锁以及对应的两个Condition,将入队操作和出队操作分原创 2021-11-24 22:41:21 · 356 阅读 · 0 评论 -
面试系列之线程池
面试系列之线程池基本参数:int corePoolSize:核心线程数int maximumPoolSize:最大线程数long keepAliveTime:非核心线程数最大存活时间TimeUnit unit: 时间单位BlockingQueue workQueue: 等待队列ThreadFactory threadFactory:线程工厂RejectedExecutionHandler handler:拒绝策略 (实现RejectedExecutionHandler类)addWo原创 2021-11-17 12:37:57 · 347 阅读 · 0 评论 -
面试系列之volatile(JMM)
面试系列之volatile(JMM)JMM模型:java并发编程中:可见性:当一个线程修改了共享变量的值,其他线程能够看到修改的值。顺序性:即程序执行的顺序按照代码的先后顺序执行。原子性:一个或者多个操作一起全部执行不能被中断或者全部不执行1.可见性:从JMM模型我们可以看出每个CPU都有自己的本地缓存,所以当多个CPU在操作同一个共享变量时会把共享变量读到自己的本地缓存中进行操作,但是操作完成之后并不会立即将结果写到主内存,由此产生了可见性的问题。所以在这种架构出来的时候就出现对 缓存原创 2021-11-16 16:02:31 · 378 阅读 · 0 评论 -
面试系列之synchronize
面试系列之synchronize 从两方面讲清楚:synchronize之锁升级过程: 偏向锁:偏向锁是利用对象头中的MarkWord存储偏向的线程Id。锁撤销必须到达安全点之后才能进行(锁撤销消耗性能的原因)偏向锁延迟:jvm在启动时会大量用到synchronize,而且大部分都存在竞争,所以为了效率在启用阶段是禁用偏向锁的。在启动完成4秒以后开启偏向锁(当然也可以通过参数指令关闭偏向锁延迟),当偏向锁延迟关闭或者jvm启动4s以后,创建的对象直接就是匿名偏向状态(锁状态为偏向锁状态,但是为偏原创 2021-11-14 12:36:33 · 433 阅读 · 0 评论 -
面试系列之AQS以及实现
面试系列之AQS以及实现AQS:特性:阻塞等待队列,共享/独占,公平/非公平,可重入,可中断AQS原理:AQS基于管程的MESA模型实现,依然存在同步队列和条件队列过程分析:非公平锁 final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else原创 2021-11-15 16:04:46 · 449 阅读 · 0 评论