![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 86
程序员fly
希望和你一起学习
展开
-
分布式Zookeeper-基础
分布式Zookeeper-基础Zookeeper简介Zookeeper是什么Zookeeper为分布式应用提供高效且可靠的分布式协调服务,而是采用了名为 ZAB 的一致性协议。作用主要是维护和监控存储数据的状态变化,一旦变化就Zookeeper就负责将已经在Zookeeper上注册的观察者做出想要的反应(ps 观察者模式) 通过监控这些数据状态变化,从而达到基于数据的集群管理Zookeeper相关特性高可用: 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeepe原创 2021-12-01 13:28:41 · 164 阅读 · 0 评论 -
Java并发系列-ThreadLocal
Java并发系列-ThreadLocal前言面试过程中,并发知识相关中ThreadLoacl也是面试官爱问的一个点,小伙伴们一起看下下面这几个问题ThreadLocal的原理是什么,他是如何解决并发访问相关问题的ThreadLocal为什么会造成内存泄漏?如何解决内存泄漏问题,key为啥一定要使用弱引用ThreadLocal的应用场景原理线程隔离ThreadLocal里面有一个ThreadMap类型的变量threadLocals,ThreadMap我们简单理解就是个Map,key是线程对原创 2021-11-22 19:21:40 · 104 阅读 · 0 评论 -
java并发系列-CopyOnWriteArrayList
java并发系列-CopyOnWriteArrayList实现原理CopyOnWriteArrayList容器是写时复制容器,当我们往容器中添加元素的时候,不是直接往当前容器中添加,而是将以前的容器复制一份,将新元素添加到新容器中,添加完成之后会将原容器的引用指向新的容器。这样我们可以对CopyOnWriteArrayList容器可以并发读,不需要添加任何锁。因为你写的是新的容器,读的是老的容器,读写分离互不影响。相关函数Add函数/***元素新添加一个记录*/public boolean原创 2021-11-18 17:45:21 · 450 阅读 · 0 评论 -
java并发系列-CAS详解
java并发系列-CAS详解CAS什么是CAS CAS意思为比较交换,是一条CPU原子指令,CAS实现了区别于sychronized同步锁中的一种乐观锁(synchronise是一种悲观锁思想,是一种互斥锁,我拿到资源就会攥在手里,其他的等着我释放吧,而CAS是重试机制,失败就再次重试),多个线程尝试使用CAS改变某一个变量的时候,只有其中一个线程能够更新变量的值,其它线程都会失败,失败的线程不会被挂起,而是告知这次竞争失败,并且再次尝试。虽然比较交换是两个动作,但是CAS在硬件层面上保证了比较并原创 2021-11-13 18:38:23 · 363 阅读 · 0 评论 -
并发编程-synchronise系列
并发编程-synchronise系列前言synchronise一种常见的解决并发问题最常用的方式,面试对于synchronise考察主要在于其原理实现,如何使用等方面,以及和lock对比等问题,我们一起看来下下面几个问题,小伙伴们是否能回答上来Synchronise是如何保证线程安全Synchronize如何使用的,有什么问题什么是锁升级和降级synchronized与lock的区别,synchronized与volatile的区别,synchronized底层原理synchronized修原创 2021-11-10 17:19:35 · 639 阅读 · 0 评论 -
并发编程系列-volatile详解
并发编程系列-volatile详解volatile关键字的作用是什么volatile是如何实现可见性的,内存屏障i++为啥不能保证原子性(分为读数据和写数据两个操作)volatile的应用场景Java内存模型是什么简介 Volatile被称为轻量级的synchronize,运行时候开销比synchronize更小,我们知道volatile能够保证共享变量的可见性,禁止指令重排,今天一起研究下关于volatile是如何实现上述所讲的这些功能,首先我们先看一下Java内存模型相关知识。内原创 2021-11-05 15:33:21 · 164 阅读 · 0 评论 -
深入剖析线程二
前言 上一篇文章,我们总体介绍了下线程池相关的概念,知道线程池的整体流程,接下来,一起读一下线程池的源码吗,了解一下线程池是如何运行的,源码的入口是java.util.concurrent.ThreadPoolExecutor#execute,同学可以跟着IDEA一起跟下代码思想结构查看UML图我们可以看到,最顶层为Executor,类的作用如下Executor:最顶层接口,就一个方法execute()将任务的提交和任务的执行解耦,线程池的使用者只传runnable对象给execute原创 2021-10-23 17:31:41 · 107 阅读 · 0 评论 -
深入剖析线程池一
线程池是什么 刚开始的时候,没有线程池的概念,单线程慢慢满足不了我们的系统开发需求,我们就想多线程开发,但是新来一个任务就创建一个线程,这样肯定不行的,因为线程的创建需要有一定的资源,所以造一个东西能够线程复用,这就是线程池线程池解决了什么问题线程复用,降低创建资源的消耗提高响应速度,来一个任务不用等待线程池的创建,直接从池子里面去拿线程达到可管理,线程池封装了很多函数可以获取到活跃线程数,阻塞队列任务数等待,可以对线程池进行分配和调控以及可视化线程池的基本概念状态Running原创 2021-10-21 18:13:25 · 93 阅读 · 0 评论 -
并发编程系列-CompleService 类
并发编程系列-CompleService 类问题使用 Future.get()异步获取结果的时候,当异步任务没有计算成功,主线程调用 get()方法获取结果的时候会一直阻塞到线程完成为止,影响运行效率。我们习惯使用线程池达到线程的复用,线程池中使用 submit 异步计算任务获取返回结果的时候,我们可能 future.get()方式获取任务的返回结果,但是 N 个线程去执行,当前任务没有执行完成,而其他任务执行完事了,我们通过 future.get()方式获取结果的时候即使其他完事了,我们还需要等待原创 2021-10-19 16:56:34 · 237 阅读 · 0 评论 -
详解java并发原子类AtomicInteger
详解java并发原子类AtomicInteger1.1:AtomicInteger是干什么的 多线程修改Interger变量会导致结果不正确,所以设置的一个基于多线程并且基于原子类操作的Integer类,多线程下能够保证线程安全1.2:AtomicInteger是如何使用的 AtomicInteger atomicInteger = new AtomicInteger(1); atomicInteger.addAndGet(2); System.out.println原创 2020-09-27 11:50:06 · 406 阅读 · 0 评论