Java并发指南
文章平均质量分 94
本专栏主要介绍Java并发编程相关的基本原理以及进阶知识。主要包括Java多线程基础,Java并发编程基本原理以及JUC并发包的使用和源码解析。
Java技术江湖
在下程序员黄小斜,前阿里Java工程师,4年码龄。 专注分享Java技术干货文,偶尔也吹水吐槽聊人生。
展开
-
Java并发指南18:JUC常见面试题及答案
什么是 CAS 吗?CAS(Compare And Swap)指比较并交换。CAS算法CAS(V, E, N)包含 3 个参数,V 表示要更新的变量,E 表示预期的值,N 表示新值。在且仅在 V 值等于 E值时,才会将 V 值设为 N,如果 V 值和 E 值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS 返回当前 V 的真实值。Concurrent包下所有类底层都是依靠CAS操作来实现,而sun.misc.Unsafe为我们提供了一系列的CAS操作。CAS 有什么缺点?AB转载 2021-05-06 14:51:45 · 2208 阅读 · 0 评论 -
Java并发指南17:Java常见多线程面试题及答案
Java多线程面试题及答案(2020版)前言个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善~1. synchronized的实现原理以及锁优化?synchronized的实现原理synchronized作用于「方法」或者「代码块」,保证被修饰的代码在同一时间只能被一个线程访问。 synchronized修饰代码块时,JVM采用「monitorenter、monitorexit」两个指令来实现同步 synchronized修饰转载 2021-05-06 11:42:08 · 1559 阅读 · 0 评论 -
Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的Thre转载 2020-08-12 19:42:56 · 1512 阅读 · 0 评论 -
Java并发技术学习总结
Java并发这篇总结主要是基于我Java并发技术系列的文章而形成的的。主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢更多详细内容可以查看我的专栏文章:Java并发技术指南https://blog.csdn.net/column/details/21961.html线程安全线程安全一般指多线程之间的操作结果不会因为线程调度的顺序不同而发生改...原创 2018-06-28 14:40:06 · 9470 阅读 · 1 评论 -
Java并发指南16:JUC中常用的Unsafe和Locksupport
说一说Java的Unsafe类最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家分享一下。Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Cassandra、Hadoop、Kafka等。Unsafe类在提升Java运行效率,增强...转载 2017-04-21 13:27:33 · 5507 阅读 · 0 评论 -
Java并发编程指南15:Fork/join并发框架与工作窃取算法剖析
原创文章,转载请注明:转载自并发编程网 – ifeve.com1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就...转载 2017-05-22 12:01:22 · 6427 阅读 · 1 评论 -
Java并发指南14:Java并发容器ConcurrentSkipListMap与CopyOnWriteArrayList
原文出处http://cmsblogs.com/『chenssy』到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。 红黑树:插入、查找为O(logn),但常数项较小;无锁实现的复杂性很高,一般需要加锁;数...转载 2017-03-31 14:46:49 · 6545 阅读 · 4 评论 -
Java并发指南13:Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
微信公众号【黄小斜】作者是 985 硕士,蚂蚁金服 Java 工程师,互联网行业新知,终身学习践行者。(关注公众号后回复”架构师“即可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源) Java7...转载 2017-03-31 22:14:17 · 7428 阅读 · 2 评论 -
Java并发指南12:深度解读 java 线程池设计思想及源码实现
深度解读 java 线程池设计思想及源码实现转自https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io我相信大家都看过很多的关于线程池的文章,基本上也是面试必问的,好像我写这篇文章其实是没有什么意义的,不过,我相信你也和我...转载 2017-04-07 13:38:10 · 6308 阅读 · 1 评论 -
Java并发指南11:解读 Java 阻塞队列 BlockingQueue
解读 Java 并发队列 BlockingQueue转自:https://javadoop.com/post/java-concurrent-queue最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括我自己在仔仔细细看源码之前,也有许多的不解,甚至有些地方我一直都没有理解到位。说到线程池实现,那么就不得不涉及到各种 BlockingQueue 的实现,...转载 2017-04-11 14:56:56 · 7061 阅读 · 0 评论 -
Java并发指南10:Java 读写锁 ReentrantReadWriteLock 源码分析
Java 读写锁 ReentrantReadWriteLock 源码分析转自:https://www.javadoop.com/post/reentrant-read-write-lock#toc5本文内容:读写锁 ReentrantReadWriteLock 的源码分析,基于 Java7/Java8。阅读建议:虽然我这里会介绍一些 AQS 的知识,不过如果你完全不了解 AQS,看本文...转载 2017-03-08 19:08:34 · 4547 阅读 · 0 评论 -
Java并发指南9:AQS共享模式与并发工具类的实现
一行一行源码分析清楚 AbstractQueuedSynchronizer (三)转自:https://javadoop.com/post/AbstractQueuedSynchronizer-3这篇文章是 AQS 系列的最后一篇,第一篇,我们通过 ReentrantLock 公平锁分析了 AQS 的核心,第二篇的重点是把 Condition 说明白,同时也说清楚了对于线程中断的使用...转载 2017-04-10 21:53:54 · 6034 阅读 · 0 评论 -
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
一行一行源码分析清楚 AbstractQueuedSynchronizer (二)转自https://www.javadoop.com/post/AbstractQueuedSynchronizer-2文章比较长,信息量比较大,建议在 pc 上阅读。文章标题是为了呼应前文,其实可以单独成文的,主要是希望读者看文章能系统看。本文关注以下几点内容:深入理解 Reentran...转载 2017-03-09 10:42:33 · 7233 阅读 · 1 评论 -
Java并发指南7:JUC的核心类AQS详解
一行一行源码分析清楚AbstractQueuedSynchronizer转自https://www.javadoop.com/post/AbstractQueuedSynchronizer#toc4在分析 Java 并发包 java.util.concurrent 源码的时候,少不了需要了解 AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为...转载 2017-03-08 19:00:06 · 4877 阅读 · 2 评论 -
Java并发指南6:Java内存模型JMM总结
在前面的文章中我们介绍了Java并发基础和线程安全的概念,以及JMM内存模型的介绍,包括其定义的各种规则。同时我们也介绍了volatile在JMM中的实现原理,以及Lock锁和synchronized实现同步方式的区别。最后还讲述了final关键字在JSR-133中的语义加强。介绍了这么多内容,主要还是围绕着JMM来讲的,所以本文再次对JMM做一个总结。处理器内存模型顺序一致性内...原创 2017-03-16 11:21:13 · 4166 阅读 · 1 评论 -
Java并发指南5:JMM中的final关键字解析
与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。下面,我们通过一些示例性的代码来分别说明这两...转载 2017-03-08 20:15:47 · 5013 阅读 · 0 评论 -
Java并发指南4:Java中的锁 Lock和synchronized
Java中的锁机制及Lock类锁的释放-获取建立的happens before 关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的示例代码:class MonitorExample { int a = 0; public synchronized void wr...转载 2017-03-08 19:21:16 · 8397 阅读 · 3 评论 -
Java并发指南3:并发三大问题与volatile关键字,CAS操作
序言先来看如下这个简单的Java类,该类中并没有使用任何的同步。01 finalclassSetCheck { 02 privateinta =0; 03 privatelongb =0; 04 05 voidset() { 06 a =1; 07 b = -1; 08 } 0...转载 2017-03-08 14:06:54 · 8451 阅读 · 1 评论 -
Java并发指南2:深入理解Java内存模型JMM
一:JMM基础与happens-before并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。...转载 2017-03-09 09:49:20 · 5312 阅读 · 0 评论 -
Java并发指南1:并发基础与Java多线程
什么是并发在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间、所有的内存和其他计算机...转载 2017-03-08 09:46:01 · 7897 阅读 · 0 评论 -
Java并发指南开篇:Java并发编程学习大纲
这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类。当然这些都是并发编程的基本知识,除了使用这些工具以外,Java并发编程中涉及到的技术原理十分丰富。为了更好地把并发知识形成一个体系,也鉴于本人没有能力写出这类文章,于是参考几位并发编程专家的博客和书籍,做一个简单的整理。一:并发基础和多线程首先需要学习的就是并发的基础知识,什么是并发,为什么要并发,多线程的概念,线程...原创 2017-03-08 09:46:49 · 8238 阅读 · 6 评论 -
从Java小白到收获BAT等offer,分享我这两年的经验和感悟
写在最前我写过很多篇秋招总结,这篇文章应该是最后一篇总结,当然也是最完整,最详细的一篇总结。秋招是我人生中一段宝贵的经历,不仅是我研究生生涯交出的一份答卷,也是未来职业生涯的开端。仅以此文,献给自己,以及各位在求职路上的,或者是已经经历过校招的朋友们。不忘初心,方得始终。前言在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司...原创 2017-03-08 09:40:54 · 37282 阅读 · 16 评论