今天开始学习JUC容器。JUC提供了用于多线程上下文中的Collection实现与高效的、可伸缩的、线程安全的非阻塞FIFO队列。参考JDK1.8,画出下图。 List JUC容器中List的实现只有CopyOnWrit…
标签:java并发
原子变量与非阻塞同步机制(第十五章)
原子变量与非阻塞同步机制 与基于锁的方案相比,非阻塞算法在设计和实现上都要负责得多,但它们在可伸缩性和活跃性上拥有巨大的优势。原子变量提供了与volatile类型变量相同的内存语义,此外还支持原子的更新操作,从而使它们更…
Java并发编程札记-(五)JUC容器-07ConcurrentLinkedQueue
ConcurrentLinkedQueue是一个基于链表的、无界的、线程安全的队列。此队列按照FIFO原则对元素进行排序。此队列不允许使用null元素,采用了有效的“无等待(wait-free)”算法(CAS算法)。 与…
Java中的基础构建模块(第五章)
Java中的基础构建模块 Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类。 1.同步容器类 同步容器类都是线程安全的,但在某些情况下可能需要额外的客…
Java并发编程札记-(四)JUC锁-06LockSupport
LockSupport是JUC锁中比较基础的类,用来创建锁和其他同步类的基本线程阻塞原语。比如,在AQS中就使用LockSupport作为基本线程阻塞原语。它的park()和unpark()方法分别用于阻塞线程和解除阻塞…
Java并发编程札记-(四)JUC锁-02Lock与ReentrantLock
今天学习Lock与ReentrantLock。 Java中的锁有两种,synchronized与Lock。因为使用synchronized并不需要显示地加锁与解锁,所以往往称synchronized为隐式锁,而使用Loc…
Java并发编程札记-(四)JUC锁-05ReentrantReadWriteLock简介
前面在Java并发编程札记-(四)JUC锁-02Lock与ReentrantLock一文中已经学习了ReentrantLock,其中提到了ReentrantLock是互斥锁。与互斥锁相对应的是共享锁。ReadWriteL…
Java并发编程札记-(五)JUC容器-05ArrayBlockingQueue与LinkedBlockingQueue
今天来学习ArrayBlockingQueue与LinkedBlockingQueue。 ArrayBlockingQueue是一个基于数组的有界阻塞队列。“有界”表示数组容量是固定的。这是一个典型的“有界缓存区”,固定…
Java并发编程札记-(三)JUC原子类-01概述
今天来学习JUC原子类。JUC原子类位于java.util.concurrent.atomic包下,支持在单个变量上解除锁的线程安全编程。 参考JDK1.8的java.util.concurrent.atomic包,画出…
Java并发编程札记-(六)JUC线程池-05ExecutorCompletionService
CompletionService接口是将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者利用submit()提交要执行的任务。使用者利用take()获取并移除已完成的任务的返回值,并按照完成这些任务的顺序处…
Java并发编程札记-(三)JUC原子类-04原子方式更新引用
An object reference that may be updated atomically. The AtomicReference class provides reference objects that …
Java并发编程札记-(四)JUC锁-07读写锁的升级—StampedLock
StampedLock是JDK1.8新增的一个锁,是对读写锁ReentrantReadWriteLock的改进。前面已经学习了ReentrantReadWriteLock,我们了解到,在共享数据很大,且读操作远多于写操作…