
并发
Java并发
住手丶让我来
我是革命一块砖,哪里需要哪里搬!
展开
-
高并发编程之ReentrantLock工具类讲解
一、ReentrantLock介绍①、ReentrantLock实现了Lock接口,加锁和解锁都需要显式写出,注意一定要在适当时候unlock。②、可重入锁。可重入锁是指同一个线程可以多次获取同一把锁。也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞③、可中断锁。可中断锁是指线程尝试获取锁的过程中,是否可以响应中断。syn...原创 2019-02-23 21:28:04 · 505 阅读 · 0 评论 -
高并发编程之CopyOnWriteArrayList介绍
一、CopyOnWriteArrayList介绍①、CopyOnWriteArrayList,写数组的拷贝,支持高效率并发且是线程安全的,读操作无锁的ArrayList。所有可变操作都是通过对底层数组进行一次新的复制来实现。②、CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。它不存在扩容的概念,每次写操作都要复制一个副本,在副本的基础上修改后改变Arr...原创 2019-02-28 10:28:59 · 30165 阅读 · 13 评论 -
高并发编程之ConcurrentLinkedDeque讲解
一、ConcurrentLinkedDeque介绍ConcurrentLinkedDeque 是双向链表结构的无界并发队列。从JDK 7开始加入到J.U.C的行列中。使用CAS实现并发安全,与 ConcurrentLinkedQueue 的区别是该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除)。适合“多生产,多消费”的场景。内存一致性遵循对 Concu...原创 2019-02-28 09:16:57 · 15695 阅读 · 3 评论 -
高并发编程之ConcurrentLinkedQueue讲解
一、ConcurrentLinkedQueue介绍一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素,队列的尾部 是队列中时间最短的元素。当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法来实现,该算法在Michael & Scott算法上进行了一些修改, Michael & S...原创 2019-02-28 00:11:20 · 989 阅读 · 0 评论 -
高并发编程之ConcurrentHashMap讲解
一、ConcurrentHashMap介绍ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。(简单理解就是,Conc...原创 2019-02-27 20:22:02 · 923 阅读 · 0 评论 -
高并发编程之LinkedBlockingDeque讲解
一、LinkedBlockingDeque介绍LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FILO两种操作方式,即可以从队列的头和尾同时操作(插入/删除);并且,该阻塞队列是支持线程安全。还有,LinkedBlockingDeque还是可选容量的(防止过度膨胀),即可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VA...原创 2019-02-27 18:59:31 · 10003 阅读 · 0 评论 -
高并发编程之Semaphore简介
一、Semaphore介绍①、Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施,也是操作系统中用于控制进程同步互斥的量。②、Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。③、Semaphore是并发包中提供的用于控制某资源同时被访问的个数④、操作系统的信号量是个很重要的概念,在进...原创 2019-02-22 21:06:00 · 270 阅读 · 0 评论 -
高并发编程之Exchanger工具类讲解
一、Exchanger介绍①、Exchanger,并发工具类,用于线程间的数据交换。②、两个线程,两个缓冲区,一个线程往一个缓冲区里面填数据,另一个线程从另一个缓冲区里面取数据。当填数据的线程将缓冲区填满时,或者取数据的线程将缓冲区里的数据取空时,就主动向对方发起交换缓冲区的动作,而交换的时机是,一个缓冲区满,另一个缓冲区空。注意:使用Exchanger来对线程进行数据操作时,线程必须是成对...原创 2019-02-22 19:58:33 · 295 阅读 · 0 评论 -
高并发编程之AtomicInteger讲解
一、AtomicInteger介绍①.支持原子操作的Integer类②.主要用于在高并发环境下的高效程序处理。使用非阻塞算法来实现并发控制二、AtomicInteger的常用的方法①.get()方法:获取当前value的值,无锁package chapter3.atomicinteger;import java.util.concurrent.atomic.AtomicInteger;...原创 2019-02-17 16:50:33 · 10583 阅读 · 0 评论 -
高并发编程之单线程执行设计模式
一、介绍我们模拟一个场景:多个游客要验证身份通过一道门三个类:1.Gate:相当于一个资源 调用一个方法pass 方法2.User 是使用资源的地方,也就是每一个用户,或者说是通过门的游客3.SingleClient 当User跑起来的时候不断的使用这个资源二、代码实现①.Gate类package chapter2.singlegate;/** * @author czd...原创 2019-02-14 22:01:05 · 310 阅读 · 0 评论