concurrent
文章平均质量分 95
crossoverJie
会crossover的程序猿
展开
-
你应该知道的 volatile 关键字
前言不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。首先来看看为什么会出现这个关键字。内存可见性由于 Java 内存模型(JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工...原创 2018-03-09 10:06:00 · 181 阅读 · 0 评论 -
线程池没你想的那么简单(续)
前言前段时间写过一篇《线程池没你想的那么简单》,和大家一起撸了一个基本的线程池,具备:线程池基本调度功能。线程池自动扩容缩容。队列缓存线程。关闭线程池。这些功能,最后也留下了三个待实现的 features 。执行带有返回值的线程。异常处理怎么办?所有任务执行完怎么通知我?这次就实现这三个特性来看看 j.u.c 中的线程池是如何实现这些需求的。再看本文之前,强烈建议...原创 2019-06-06 09:11:49 · 221 阅读 · 0 评论 -
线程池没你想的那么简单
前言原以为线程池还挺简单的(平时常用,也分析过原理),这次是想自己动手写一个线程池来更加深入的了解它;但在动手写的过程中落地到细节时发现并没想的那么容易。结合源码对比后确实不得不佩服 Doug Lea 。我觉得大部分人直接去看 java.util.concurrent.ThreadPoolExecutor 的源码时都是看一个大概,因为其中涉及到了许多细节处理,还有部分 AQS 的内容,所以想...原创 2019-05-20 08:42:43 · 306 阅读 · 0 评论 -
图床失效了?也许你应该试试这个工具
前言经过几个小伙伴的提醒,发现个人博客中的许多图片都裂了无法访问;原因就不多说,既然出现问题就得要解决。原本我的处理方式非常简单粗暴:找到原有的图片重新下载下来上传到新的可用图床再把图片地址替换。这样搞了一两篇之后我就绝望了。。。之前为了代码能在公众号里也有好的阅读体验,所以能截图的我绝不贴代码,导致一篇文章多的得有十几张图片。好在哪位大佬说过“以人肉XX为耻”,这种重复劳动力完...原创 2019-05-09 08:51:01 · 1063 阅读 · 1 评论 -
『并发包入坑指北』之向大佬汇报任务
前言目录如下:在面试过程中聊到并发相关的内容时,不少面试官都喜欢问这类问题:当 N 个线程同时完成某项任务时,如何知道他们都已经执行完毕了。这也是本次讨论的话题之一,所以本篇为『并发包入坑指北』的第二篇;来聊聊常见的并发工具。自己实现其实这类问题的核心论点都是:如何在一个线程中得知其他线程是否执行完毕。假设现在有 3 个线程在运行,需要在主线程中得知他们的运行结果;可以分为以...原创 2019-04-29 01:20:52 · 173 阅读 · 0 评论 -
『并发包入坑指北』之阻塞队列
前言较长一段时间以来我都发现不少开发者对 jdk 中的 J.U.C(java.util.concurrent)也就是 Java 并发包的使用甚少,更别谈对它的理解了;但这却也是我们进阶的必备关卡。之前或多或少也分享过相关内容,但都不成体系;于是便想整理一套与并发包相关的系列文章。其中的内容主要包含以下几个部分:根据定义自己实现一个并发工具。JDK 的标准实现。实践案例。基于这三...原创 2019-04-10 08:28:02 · 269 阅读 · 0 评论 -
线程池中你不容错过的一些细节
背景上周分享了一篇《一个线程罢工的诡异事件》,最近也在公司内部分享了这个案例。无独有偶,在内部分享的时候也有小伙伴问了之前分享时所提出的一类问题:这其实是一类共性问题,我认为主要还是两个原因:我自己确实也没讲清楚,之前画的那张图还需要再完善,有些误导。第二还是大家对线程池的理解不够深刻,比如今天要探讨的内容。线程池的工作原理首先还是来复习下线程池的基本原理。我认为线程...原创 2019-03-26 09:02:32 · 159 阅读 · 0 评论 -
一份针对于新手的多线程实践--进阶篇
前言在上文《一份针对于新手的多线程实践》留下了一个问题:这只是多线程其中的一个用法,相信看到这里的朋友应该多它的理解更进一步了。再给大家留个阅后练习,场景也是类似的:在 Redis 或者其他存储介质中存放有上千万的手机号码数据,每个号码都是唯一的,需要在最快的时间内把这些号码全部都遍历一遍。有想法感兴趣的朋友欢迎在文末留言参与讨论原创 2018-10-31 10:56:48 · 188 阅读 · 0 评论 -
一份针对于新手的多线程实践
前言前段时间在某个第三方平台看到我写作字数居然突破了 10W 字,难以想象高中 800 字作文我都得巧妙的利用换行来完成(懂的人肯定也干过原创 2018-10-29 08:13:14 · 230 阅读 · 0 评论 -
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!
前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 ...原创 2018-07-23 01:32:34 · 10616 阅读 · 10 评论 -
如何优雅的使用和理解线程池
前言平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条:可见线程池的重要性。简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建。解耦作用;线程的创建于执行完全分开,方便维护。应当将其放入一个池子中,可以给其他任务进行复用。线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵...原创 2018-07-30 09:14:04 · 205 阅读 · 0 评论 -
一次线上问题排查所引发的思考
前言之前或多或少分享过一些内存模型、对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义。直到有一天你会碰到线上奇奇怪怪的问题,如:线程执行一个任务迟迟没有返回,应用假死。接口响应缓慢,甚至请求超时。CPU 高负载运行。这类问题并不像一个空指针、数组越界这样明显好查,这时就需要刚才提到的内存模型、对象创建、线程等相关知识结合在一起来排查问题了。...原创 2018-07-09 09:34:36 · 499 阅读 · 1 评论 -
深入理解线程通信
前言开发中不免会遇到需要所有子线程执行完毕通知主线程处理某些逻辑的场景。或者是线程 A 在执行到某个条件通知线程 B 执行某个操作。可以通过以下几种方式实现:等待通知机制 等待通知模式是 Java 中比较经典的线程通信方式。两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来进行通讯。如两个线程交替打印奇偶数:pu...原创 2018-03-19 10:05:57 · 279 阅读 · 0 评论 -
再一次生产 CPU 高负载排查实践
前言前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU 100% 排查优化实践》不过本次问题产生的原因却和上次不太一样,大家可以接着往下看。问题分析收到邮件后我马上登陆那台服务器,看了下案发现场还在(负载依然很高)。于是我便利用这类问题的排查套路定位一遍...原创 2019-06-18 08:38:11 · 220 阅读 · 0 评论