![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 90
徐小明的博客
这个作者很懒,什么都没留下…
展开
-
AQS简介与源码剖析
AbstractQueuedSynchronizer,简称AQS,是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量、事件等)的基础框架类。java.util.concurrent并发包中的工具类的内部实现都依赖于AQS,如常用的ReentrantLock, ReentrantWriteLock, CountDownLatch等的核心都是AQS,虽然它们都依赖AQS,但是通过AQS实现...原创 2018-05-29 16:05:34 · 470 阅读 · 0 评论 -
ReentrantLock——重入锁
ReentrantLock在AQS简介与源码分析中有所提及,本篇将用JDK1.8深入探索它内在的含义以及公平锁和非公平锁的性能测试比较。ReentrantLock实现了Lock接口,Lock接口提供比使用synchronized方法和语句有着更灵活的结构化,此外它还提供了其他功能,包括定时的锁等待、可中断的锁等待并且可以支持多个关联 Condition对象(关于Condition后续博文会单独解释...原创 2018-05-29 16:11:35 · 288 阅读 · 0 评论 -
如何理解Condition
在jdk1.5以后并发包中提供了Lock接口,Condition接口与Lock配合使用可以实现等待/通知模式,在此之前是使用定义在Object对象上的一组监视器方法,主要包括:wait()、wait(long timeout)、notify()以及notifyAll()方法,这些方法synchronized结合使用,也可以实现等待/通知。Object的监视器方法与Condition接口的对比如下(...原创 2018-05-29 16:20:13 · 713 阅读 · 0 评论 -
JDK7源码分析ConcurrentHashMap
一、ConcurrentHashMap的由来原因可以总结成以下两点:1、HashMap是非线程安全的,在并发的场景中可能导致死循环2、hasetable虽然线程安全但效率却很低下1>线程不安全的HashMap下面代码取自并发编程艺术一书中,执行该代码会引起死循环public class HashMapTest { public static void main(String[] arg...原创 2018-05-29 16:22:58 · 541 阅读 · 0 评论 -
关于volatile的那些事
一:写在前面的话:本篇文章大的方面来说会有两个:基础知识铺垫以及重点着墨点。闲言碎语就到这里了,下面进入正题。在进入本片文章的重点volatile之前先让我们来了解Java内存模型。二:Java内存模型1、java内存模型说明了某个线程的内存操作在哪些情况下对其他线程是可见的,从抽象的角度看,JMM定义了线程和主内存之间的抽象关系,线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,...原创 2018-05-29 16:39:24 · 365 阅读 · 0 评论 -
深入理解ThreadLocal
刚吃完皮皮虾,擦擦手继续写博客_____ThreadLocal一、先来举个栗子直观的感受下这个JAVA面试的常客运行结果:1、在上述示例中第一次get()取出的值为初始化的“皮皮虾”,再第二次set后,获取到的值为“皮皮虾,我们走”,说明set方法会覆盖原先的值。2、initialValue方法:返回线程本地变量的当前线程的初始值。可以避免在没有set之后的第一次调用get方法出现null的情况。...原创 2018-05-29 16:40:48 · 312 阅读 · 0 评论