![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发包J.U.C
文章平均质量分 56
讲解java并发支持包, java.utils.concurrent
静谧之心
专业摩的佬
业余吉他手
退役喷子
展开
-
每期一个小窍门: java线程池的几种任务拒绝策略
当线程都满了,且队列也满了的情况下,会调用该方法来拒绝任务,有多种策略可以选择,或者自定义实现原创 2022-12-05 17:55:12 · 6249 阅读 · 1 评论 -
Zookeeper实现分布式锁
原理:每个ZK客户端对某个方法加锁时,在Zookeeper上与该方法对应的指定节点的目录下,生成一个唯一的临时节点。 … 当释放锁的时候,只需将这个临时节点删除即可。 同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。ZK工具类代码实现package com.bestksl.tools;import lombok.extern.slf4j.Slf4j;import org....原创 2020-04-20 14:01:20 · 171 阅读 · 0 评论 -
Zookeeper(Curator)实现集群配置文件统一管理
统一监听管理的优势?因为懒, 减轻运维人员的负担, 防止由于疏忽导致集群配置文件出错.解决思路把公共配置抽取出来对公共配置进行维护修改公共配置后应用不需要重新部署采用方案公共配置抽取存放于zookeeper中并落地数据库对公共配置修改后发布到zookeeper中并落地数据库对应用开启配置实时监听,zookeeper配置文件一旦被修改,应用可实时监听到并获取...原创 2020-04-19 13:00:57 · 831 阅读 · 0 评论 -
硬核讲解JDK1.8的ConcurrentHashMap为何放弃分段锁改用CAS + synchronized
jdk1.7分段锁的实现和hashmap一样,在jdk1.7中ConcurrentHashMap的底层数据结构是数组加链表。和hashmap不同的是ConcurrentHashMap中存放的数据是一段段的,即由多个Segment(段)组成的。每个Segment中都有着类似于数组加链表的结构。关于SegmentConcurrentHashMap有3个参数:initialCapacity:初...原创 2020-04-15 04:21:03 · 39608 阅读 · 13 评论 -
HashMap在 JDK1.7中的线程安全问题
HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。产生死循环的过程(仅在jdk1.7有效, 1.8由于变成了尾插法, 虽然也有并发线程安全问题, 但是不会造成死循环了) /**对HashMap进行容量扩充 * Transfe...原创 2020-04-15 02:37:21 · 495 阅读 · 0 评论 -
J.U.C之深入理解Java线程池ThreadPoolExecutor
Java中的线程池是运用场景最多的并发框架, 几乎所有需要异步或并发执行任务的程序都可以使用线程池。 在开发过程中, 合理地使用线程池能够带来3个好处。降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。 当任务到达时, 任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。 线程是稀缺资源, 如果无限制地创建, 不仅会消耗系统资源,还会降低系统的稳定...原创 2020-04-13 11:02:00 · 200 阅读 · 0 评论 -
java Queue中 add/offer,element/peek,remove/poll区别
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementExcep...原创 2020-04-13 08:27:39 · 196 阅读 · 0 评论 -
J.U.C组件BlockingQueue及其具体实现类介绍
BlockingQueue 简介在实际编程中,会经常使用到 JDK 中 Collection 集合框架中的各种容器类如实现 List,Map,Queue 接口的容器类,但是这些容器类基本上不是线程安全的,除了使用 Collections 可以将其转换为线程安全的容器,Doug Lea 大师为我们都准备了对应的线程安全的容器,如实现 List 接口的 CopyOnWriteArrayList,实现...原创 2020-04-13 05:46:01 · 539 阅读 · 0 评论 -
J.U.C之Fork/Join并行计算框架详解
ForkJoin实现分而治之对于简单的并行任务可以通过"线程池+Future"方案来解决。如果任务额之间有聚合关系(AND聚合或者OR聚合)用CompletableFuture解决。批量的并行任务用CompletionService解决。并发编程可以分为三个层面的问题: 分工,协作,互斥。ForkJoin有什么用Fork/Join是一个并行计算的框架,与MapReduce的设计思想...原创 2020-04-13 04:42:39 · 364 阅读 · 0 评论 -
J.U.C-AQS框架同步组件之可重入锁ReentrantLock详解
ReentrantLock?synchronized是托管给JVM执行的,Lock的锁定是通过代码实现的。所以Lock比较灵活,可以便于开发人员根据合适的场景进行操作,Lock是一个接口,需要实现它来进行使用,ReetrantLock是Lock的主要实现类,ReetrantLock是一个可重入锁,同时可以指定公平锁和非公平锁,我们来具体看一下他的实现方式。什么是可重入锁?为什么叫重入锁呢?...原创 2020-04-12 14:48:18 · 281 阅读 · 0 评论 -
J.U.C-AQS框架简介
AQS 简介AbstractQueuedSynchronizer抽象队列同步器,简称为AQS,可用于构建阻塞锁或者其他相关同步器的基础框,是Java并发包的基础工具类。通过AQS这个框架可以对同步状态原子性管理、线程的阻塞和解除阻塞、队列的管理进行统一管理。AQS是抽象类,并不能直接实例化,当需要使用AQS的时候需要继承AQS抽象类并且重写指定的方法,这些重写方法包括线程获取资源和释放资源的方...原创 2020-04-12 14:23:26 · 341 阅读 · 0 评论 -
J.U.C-AQS框架同步组件之StampedLock乐观锁悲观锁
StampedLock java1.8提供的, 性能比ReadWriteLock好.乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低(不是没有, 所以还要加锁, 区别于不加锁的乐观读),每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),...原创 2020-04-12 13:42:20 · 256 阅读 · 0 评论 -
J.U.C-AQS框架同步组件之栅栏锁CyclicBarrier详解
CyclicBarrier是什么?CyclicBarrier也叫同步屏障,在JDK1.5被引入,可以让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,屏障才会开门,所有被阻塞的线程才会继续执行。他的主要用途是控制多个线程互相等待,只有当多个线程都到达时,这些线程才会继续执行。CyclicBarrier好比一扇门,默认情况下关闭状态,堵住了线程执行的道路,直到所有线程都就位,门才打开...原创 2020-04-12 08:34:11 · 541 阅读 · 0 评论 -
J.U.C-AQS框架同步组件之信号量Semaphore介绍
Semaphore的概念Semaphore是一个计数器信号量,它维护了一个许可集合,用来控制对一定资源的消费与回收。当线程调用acquire()方法时,如果许可不足,那么线程将block,直到有许可可用。release()方法则会释放一个许可。Semaphore的用法Semaphore提供了两个构造方法:public Semaphore(int permits) { //...原创 2020-04-12 05:54:09 · 224 阅读 · 0 评论 -
J.U.C-AQS框架同步组件之闭锁CountDownLatch介绍
CountDownLatch是什么?CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程...原创 2020-04-12 03:58:15 · 262 阅读 · 0 评论 -
从J.U.C的CopyOnWriteArrayList理解COW(读写分离)实现高效并发
Copy-On-Write是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种读写分离的思想, 向并发安全性做的妥协。什么是CopyOnWrite容器CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进...原创 2020-04-11 10:12:42 · 427 阅读 · 0 评论 -
Java(J.U.C) 同步容器 并发容器大全
什么是同步容器?同步容器通过synchronized关键字修饰容器保证同一时刻内只有一个线程在使用容器,从而使得容器线程安全。synchronized的意思是同步,它体现在将多线程变为串行等待执行。(但注意一点,复合操作不能保证线程安全。举例:A线程第一步获取尾节点,第二步将尾结点的值加1,但在A线程执行完第一步的时候,B线程删除了尾节点,在A线程执行第二步的时候就会报空指针)什么是并发容器?...原创 2020-04-11 09:54:45 · 393 阅读 · 0 评论