
Java并发
文章平均质量分 80
你的小祖宗饿了
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ConcurrentHashMap的介绍以及1.7和1.8版本的区别
相信大多数的同学在面试的过程中ConcurrentHashMap是一个绕不开的话题,那么ConcurrentHashMap的一些重要方法如put()、get()、size()等方法的实现过程是怎么样的?以及JDK1.7和1.8又有什么样的区别?我们先来介绍1.7版本的ConcurrentHashMap: 在初始化ConcurrentHashMap的时候,会初始化一个Segment数组,容量为16,而每个Segment都继承了ReentrantLock类,也就是说每个Segment类本身就是一...原创 2021-01-09 19:36:09 · 2831 阅读 · 0 评论 -
RocketMQ 怎么保证的消息不丢失
一、消息发送过程我们将消息流程分为如下三大部分,每一部分都有可能会丢失数据。 生产阶段:Producer通过网络将消息发送给Broker,这个发送可能会发生丢失,比如网络延迟不可达等。 存储阶段:Broker肯定是先把消息放到内存的,然后根据刷盘策略持久化到硬盘中,刚收到Producer的消息,再内存中了,但是异常宕机了,导致消息丢失。 消费阶段:消费失败了其实也是消息丢失的一种变体吧。 二、Producer生产阶段Producer通过网络将消息发送给Broker,转载 2020-07-03 11:54:27 · 1775 阅读 · 0 评论 -
java采用CountDownLatch +“多线程”----实现多个线程分别处理不同任务
最近在工作时,有一位同事遇到了一个查询优化的问题,过来向我请教。 问题大致是这样的:要给前端提供一个查询的接口,而在此接口中要去调用远端的10几个ESB接口,由于要调用的远端ESB接口数量过多导致此接口响应异常缓慢,甚至于达到了十几秒钟。现在要想办法去优化这个接口。这十几个远端的ESB接口不用关心调用顺序,不需要互相依赖。 针对于这个问题,我其实第一反应想到的是采用...原创 2020-05-07 19:37:40 · 1288 阅读 · 0 评论 -
面试中被问到HashMap的结构,1.7和1.8有哪些区别?这篇做深入分析!
一、真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点:(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。(2)扩容后数据存储位置的计算方式也不一...转载 2020-02-25 17:04:41 · 1774 阅读 · 1 评论 -
Redis的这八个问题,验证你是否精通!
1、为什么使用Redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果...转载 2019-10-18 11:00:06 · 290 阅读 · 0 评论 -
Java并发包的简单介绍
同步容器类1、VectorVactor和ArrayList相同的是也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。从底层源码中可以看出,Vector的add、remove等方法都加了关键字synchronized,因此它是线程安...原创 2019-06-06 13:03:36 · 223 阅读 · 0 评论 -
Java线程池的实现
首先,对于什么是线程池?使用线程池的好处是什么?都没有必要做过多的解释。一、线程池执行流程直接来看线程池的执行流程原理:二、JDK对线程池的支持 为了能够更好的控制多线程,JDK提供了一套Executor框架,帮助开发人员有效的进行线程控制,其本质就是一个线程池,核心成员如下,他们都在java.util.concurrent包下,也是jdk并发包的核心类。图...原创 2019-06-11 16:25:12 · 195 阅读 · 0 评论 -
线程池中如何寻找堆栈?如何打印出堆栈的异常信息?
先由一个案例引入,来解释为什么要寻找线程池中的堆栈。请看下面的一个简单案例,有一个Runable接口,用它来计算两个数的商。public class DivTask implements Runnable { int a,b; public DivTask(int a, int b) { this.a = a; this.b = b;...原创 2019-06-27 17:07:07 · 1421 阅读 · 0 评论 -
优化Java锁性能的方法有哪些?
锁是最常见的同步方法之一。在高并发环境中,激烈的锁争用会导致程序性能下降,因此有与锁相关的一些性能问题,以及避免死锁、降低锁粒度和锁分离等一些注意事项都是有必要讨论和研究清楚的。在单核CPU上使用并行算法的效率通常低于原来的串行算法。而并行计算之所以能够提高系统的性能,并不是因为它“工作量小”,而是因为它能够更合理地调度任务,充分利用各个CPU资源。因此,合理的组合可以最大限度地提高...原创 2019-07-30 15:26:14 · 566 阅读 · 1 评论