11、锁-java并发包类功能介绍

本文主要整理JDK1.8并发包下面的类提供哪些功能及相关原理。Demo实现演示

一、线程安全容器类

1、ConcurrentHashMap

实现原理:synchronized加锁
一个线程安全的容器,设计对标HashMap。和HashMap的区别是在putVal、replaceNode、clear等方法加入
synchronized
关键词。
**使用场景:**提供线程安全的HashMap

2、ConcurrentSkipListMap

**实现原理:**跳表实现List线程不安全,性能算法在O(1)-logN之间。
**使用场景:**跳表适合有list场景需求,但是对性能要求比较高的场景。

3、ConcurrentSkipListSet

**实现原理:**跳表实现Set线程不安全,性能算法在O(1)-logN之间。
**使用场景:**跳表适合有Set场景需求,但是对性能要求比较高的场景。

4、CopyOnWriteArrayList

**实现原理:**ReentrantLock Cas乐观锁
一个数组线程安全操作类,原理是对数组先copy在操作,不同线程有不同的副本。在copy副本的时候使用ReentrantLock加锁保证副本的正确。在remove、add等方法加入ReentrantLock皆在于保证数据一致性。
**使用场景:**多线程数据线程环境,要求操作数据线程安全的场景

5、CopyOnWriteArraySet

**实现原理:**ReentrantLock Cas乐观锁
一个数组线程安全操作类,原理是对数组先copy在操作,不同线程有不同的副本。在copy副本的时候使用ReentrantLock加锁保证副本的正确。在remove、add等方法加入ReentrantLock皆在于保证数据一致性。
**实现场景:**多线程场景要求set集合线程安全的场景

二、线程安全队列

1、ConcurrentLinkedDeque
2、ConcurrentLinkedQueue
3、LinkedBlockingDeque
4、LinkedBlockingQueue
5、LinkedTransferQueue
6、PriorityBlockingQueue
7、SynchronousQueue

三、信号线程

1、CountDownLatch

**实现功能:**主线程等待声明的子线程数量执行完毕后在执行
**实现原理:**其实现原理很简单利用AQS申请3个共享节点每次线程countDown节点减一。当队列遍历完毕后开始释放共享线程队列。
**实现场景:**1、实现JVM钩子线程,等待任务处理完毕后处理应用关闭资源回收
2、任务并发处理,两个线程分表处理两类任务,处理完毕后统一执行主线程做接下来的逻辑。

2、CyclicBarrier

**实现功能:**所有声明的子线程等待就绪后一起并发执行。
**实现原理:其实现也比较简单,**dowait是其实现主要的逻辑。利用ReentrantLock加锁保证执行顺序,当线程准备完毕后自动执行run方法。
**实现场景:**少见,一般我自己用CountDownLatch。

3、Semaphore

**实现功能:**控制声明的子线程并发数量执行,比如一个方法只容许3个线程调用,100个线程一起调用,此时就阻塞等待执行。
**实现原理:**支持公平锁、非公平锁,每次线程执行的时候nonfairTryAcquireShared方法计数器
**实现场景:**1、线程池、连接池等场景,谁获取资源谁执行 待编辑

三、并行计算

1、CountedCompleter
2、ExecutorCompletionService
3、ForkJoinPool
4、ForkJoinTask
5、ForkJoinWorkerThread
6、RecursiveAction
7、RecursiveTask

四、线程池

1、ScheduledExecutorService
2、ScheduledThreadPoolExecutor
3、ThreadPoolExecutor
五、原子类
1、AtomicBoolean、AtomicInteger、AtomicLong…
2、AtomicReference

六、其他实现

1、ThreadLocalRandom 随机数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值