![](https://img-blog.csdnimg.cn/20200319091800745.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
凯哥学并发
从CPU讲起彻底让大家明白Java并发,不用再死记硬背。懂原理才能记得牢
凯哥Java
这个作者很懒,什么都没留下…
展开
-
Java多线程带返回值的Callable接口
Java多线程带返回值的Callable接口在面试的时候,有时候是不是会遇到面试会问你,Java中实现多线程的方式有几种?你知道吗?你知道Java中有可以返回值的线程吗?在具体的用法你知道吗?如果两个线程同时来调用同一个计算对象,计算对象的call方法会被调用几次你知道吗?如果这些你知道,那么凯哥(凯哥Java:kaigejava)恭喜你,本文你可以不用看了。如果你不知道这些,那么凯哥同样要恭喜你,看了凯哥这篇文章之后,就知道这些了。来看看这篇文章我们能学到什么本节主要内容一:三种获取多线程的的原创 2020-05-16 13:01:04 · 561 阅读 · 0 评论 -
Java中常用七个阻塞队列的总结
Java队列总结通过前面文章的学习,我们对Java中常用队列做了介绍。本文,咱们来对队列做个总结吧。首先,我们介绍了现实生活中的实际场景(排队买票等),来告诉我们为什么需要使用队列。队列是一种先进先出(FIFO)的抽象数据结构,在Java中,队列使用了两种数据类型来实现的,分别是:数组和链表这两种数据结构。本文主要内容:回顾Java中常用的七个阻塞队列进行总结及阻塞队列中四组AP并...原创 2020-05-04 10:08:13 · 1555 阅读 · 0 评论 -
Java阻塞队列四组API介绍
Java阻塞队列四组API介绍目录第一组API,会抛出异常的:一言不合就开干第二组:带有返回值的,不会抛出异常:为人处事会圆滑了第三组:阻塞,一直等待:三十而立,咬定青山不放松第四组:带有等待超时的阻塞API总结:通过前面几篇文章的学习,我们已经知道了Java中的队列分为阻塞队列和非阻塞队列以及常用的七个阻塞队列。如下图:本文来源:凯哥Java(kaige...原创 2020-05-02 09:08:35 · 330 阅读 · 0 评论 -
Java中常用的七个阻塞队列第二篇DelayQueue源码介绍
Java中常用的七个阻塞队列第二篇DelayQueue源码介绍通过前面两篇文章,我们对队列有了了解及已经认识了常用阻塞队列中的三个了。本篇我们继续介绍剩下的几个队列。本文主要内容:通过源码学习Delayqueue及理解Dqueue并用代码简单演示使用场景。本文出自凯哥Java(kaigejava)的《凯哥Java并发系列》之《Java并发编程之队列》系列的第三篇:《Java中常用的七个...原创 2020-04-23 09:29:16 · 205 阅读 · 0 评论 -
Java中常用的七个阻塞队列介绍第一篇
Java中常用的七个阻塞队列介绍第一篇在上一篇我们对Java中的队列分类做了简单的介绍。本文咱们主要来聊聊阻塞队列中的七个常用子类。这七个阻塞队列的学习步骤:先看源码,分析完源码之后,我们再来对每个队列进行总结。最后在来个大总结。文章可能有点长,但是,大家耐着性子看完,保证你对这七大阻塞队列有深刻的理解。本文主要内容:介绍前三个队列及查看源码总结每个队列的特点本文出自凯哥Java(ka...原创 2020-04-20 11:09:50 · 234 阅读 · 1 评论 -
Java队列学习第一篇之列介绍
Java并发之显式锁和隐式锁的区别在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchronized(下文简称:sync)和lock(下文就用ReentrantLock来代之lock)的区别。本文主要内容:将通过七个方面详细介绍sync和lock的区别。通过生活case中...原创 2020-04-18 09:26:46 · 178 阅读 · 0 评论 -
Java并发之显式锁和隐式锁的区别
Java并发之显式锁和隐式锁的区别在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchronized(下文简称:sync)和lock(下文就用ReentrantLock来代之lock)的区别。本文主要内容:将通过七个方面详细介绍sync和lock的区别。通过生活case中...原创 2020-04-16 09:40:12 · 966 阅读 · 3 评论 -
Java多线程并发工具类-信号量Semaphore对象讲解
Java多线程并发工具类-Semaphore对象讲解通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownLatch对象并对这两个对象进行了比较。我们发现这两个对象要么是做加法,要么是做减法的。那么有没有既做加法也做减法的呢?当然有了。Semaphore这个工具类就可以实现One out one in的。...原创 2020-04-12 09:38:16 · 377 阅读 · 0 评论 -
Java多线程工具类之循环栅栏计数器
Java多线程下循环计数器本文主要内容:CyclicBarrier(下文中凯哥就用cycBar来代替)定义介绍;举例说明;代码演示;从源码来看原理及总结;CyclicBarrier与CountDownLatch(下文就用CountDown来代替)比较。本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发工具类》教程的第二篇:《Java多线程下循环计数器》。编辑一...原创 2020-04-09 09:24:14 · 282 阅读 · 0 评论 -
从火车站车次公示栏来学Java读写锁
Java多线程并发之读写锁目录一:读写锁的理论什么是读写锁?为什么需要读写锁?二:读写锁的理解生活中读写锁的例子三:读写锁的代码演示四:读写锁总结4.1:wrLock类对象4.2:使用语法4.3:总结本文主要内容:读写锁的理论;通过生活中例子来理解读写锁;读写锁的代码演示;读写锁总结。通过理论(总结)-例子-代码-然后再次总结,这四个步骤来让大家对读...原创 2020-04-07 08:32:52 · 254 阅读 · 0 评论 -
Java并发编程锁系列之ReentrantLock对象总结
Java并发编程锁系列之ReentrantLock对象总结在Java并发编程中,根据不同维度来区分锁的话,锁可以分为十五种。ReentranckLock就是其中的多个分类。本文主要内容:重入锁理解;重入锁代码演示; ReentranckLock的总结本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《Lock系列》教程的第四篇:《Java并发包下锁学习第六篇:Reent...原创 2020-04-05 09:32:29 · 206 阅读 · 0 评论 -
Java并发编程锁之独占公平锁与非公平锁比较
Java并发编程锁之独占公平锁与非公平锁比较公平锁和非公平锁理解:在上一篇文章中,我们知道了非公平锁。其实Java中还存在着公平锁呢。公平二字怎么理解呢?和我们现实理解是一样的。大家去排队本着先来先得到的原则,在排队中,无论身份贵贱,一律平等对待。这是就是我们现实生活中的公平。大家都喜欢公平的。但是在Java中默认是非公平的,为什么呢?本文主要内容:公平锁的现实生活理解;公平锁演示;为...原创 2020-04-04 16:07:39 · 194 阅读 · 0 评论 -
从源码学习Java并发的锁是怎么维护内部线程队列的
我们知道AQS能够通过内置的FIFO队列来完成资源获取线程的排队工作。那么AQS是怎么来维护这个排队工作的呢?今天我们就来扒一扒AQS源码。从源码中来看看是怎么维护对了的。原创 2020-04-01 15:02:19 · 108 阅读 · 0 评论 -
Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍
Java并发包下锁学习第二篇队列同步器目录一:队列同步器二:同步器和锁之间的关系锁和同步器定义所面向的对象不同三:AQS对象构成内部类:Node内部类:CoditionObject常用的API方法还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图:从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本...原创 2020-03-31 11:22:43 · 166 阅读 · 0 评论 -
Java并发包下锁学习第一篇:介绍及学习安排
Java并发包下锁学习第一篇:介绍及学习安排 在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁。从今天起,凯哥将带领大家一起豪华参观(详细讲解)在Java并发包(JUC)下locks包下的体系结构。在这个系列中,我们将会学习并发包下锁实现的原理(我们将跟着源码来分析)、什么是可重入锁、公平锁和非公平锁怎么定义...原创 2020-03-30 10:16:41 · 293 阅读 · 0 评论 -
Java并发编程之set集合的线程安全类你知道吗
Java并发编程之-set集合的线程安全类Java中set集合怎么保证线程安全,这种方式你知道吗?在Java中set集合是本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第二篇:本文主要内容:Set集合子类底层分别是什么?基于底层为什么set的子类可以存放一个数据?怎么解决set线程安全问题?一:Set集合子类Set的三个子类分别是:...原创 2020-03-29 10:11:21 · 3356 阅读 · 0 评论 -
Java并发集合之List的并发集合你知道吗
Java并发编程之-list集合的并发.我们都知道Java集合类中的arrayList是线程不安全的。那么怎么证明是线程不安全的呢?怎么解决在并发环境下使用安全的list集合类呢?本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第一篇:本文主要内容:怎么证明arrayList不是线程安全的?怎么解决这个问题?以及遇到问题解决的四个步骤及从源码来分...原创 2020-03-28 09:54:40 · 734 阅读 · 1 评论 -
Java并发编程之CAS第三篇-CAS的缺点及解决办法
Java并发编程之CAS第三篇-CAS的缺点通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理。那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《CAS系列》教程的第三篇:CAS的缺点有哪些?怎么解决。CAS的缺点一:do while循环时间长的话开销大从源码中(见上...原创 2020-03-27 21:34:00 · 502 阅读 · 0 评论 -
Java并发编程之CAS二源码追根溯源
Java并发编程之CAS二源码追根溯源在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理。本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《CAS系列》教程的第二篇:从源码追根溯源查看CAS最底层是怎么实现的。本文主要内容:CAS追根溯源,彻底找到CAS的根在哪里。一:查看AtomicInte...原创 2020-03-25 22:43:47 · 211 阅读 · 0 评论 -
Java并发编程之验证volatile指令重排-理论篇
Java并发编程之验证volatile指令重排-理论篇Java并发包下的类中大量使用了volatile关键字。通过之前文章介绍,大家已经知道了volatile的三大特性:共享变量可见性;不保证原子性;禁止指令重排后顺序性。通过前面两篇文章我们通过代码验证了前两个特性,本文我们就来验证禁止指令重排保证顺序性。指令重排序的生活例子...原创 2020-03-23 12:49:22 · 1765 阅读 · 0 评论 -
Java并发编程之验证volatile不能保证原子性
Java并发编程之验证volatile不能保证原子性通过系列文章的学习,凯哥已经介绍了volatile的三大特性。1:保证可见性 2:不保证原子性 3:保证顺序。那么怎么来验证可见性呢?本文凯哥(凯哥Java:kaigejava)将通过代码演示来证明为什么说volatile不能够保证共享变量的原子性操作。我们来举个现实生活中的例子:中午去食堂打饭,假设你非常非常的饥饿,需要一荤两素再加...原创 2020-03-22 09:07:55 · 278 阅读 · 0 评论 -
Java并发编程之验证volatile的可见性
Java并发编程之验证volatile的可见性通过系列文章的学习,凯哥已经介绍了volatile的三大特性。1:保证可见性 2:不保证原子性 3:保证顺序。那么怎么来验证可见性呢?本文凯哥将通过代码演示来证明volatile的可见性。前期准备:共享变量 number 初始值是0,然后修改后的值为100;两个线程,分别是:主线程Main以及线程名为A的线程内部类:可...原创 2020-03-21 09:51:33 · 562 阅读 · 0 评论 -
Java并发编程学习前期知识下篇
Java并发编程学习前期知识下篇通过上一篇《Java并发编程学习前期知识上篇》我们知道了在Java并发中的可见性是什么?volatile的定义以及JMM的定义。我们先来看看几个大厂真实的面试题:编辑编辑编辑从上面几个真实的面试问题来看,我们可以看到大厂的面试都会问到并发相关的问题。所以Java并发,这个无论是面试还是在工作中,...原创 2020-03-20 09:49:56 · 175 阅读 · 0 评论 -
Java多线程并发之同步容器和并发容器-第一篇
Java多线程并发之同步容器和并发容器-第一篇概述本文主要讲解在Java多线程并发开发中,集合中有哪些支持并发的的。什么是同步容器(集合),什么是并发容器(集合)?并发容器分类有哪些?每个分类都有哪些类?本文是《凯哥分享Java并发编程之J.U.C包讲解》系列教程中的第五篇。如果想系统学习,凯哥(kaigejava)建议从第一篇开始看。从本篇开始,我们就来讲解讲解Java的并发容器...原创 2020-03-16 10:16:49 · 573 阅读 · 0 评论 -
Java并发之原子变量及CAS算法-下篇
Java并发之原子变量及CAS算法-下篇概述本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?。对应Java中的包是:java.util.concurrent.atomic包下。因为涉及到了CAS算法,需要对CAS算法讲解及CAS算法三个问题怎么解决以及和Synchroized比较。文章比较长,所以就分为上下两个篇幅讲解。本文是上篇...原创 2020-03-15 09:58:08 · 278 阅读 · 0 评论 -
Java并发之原子变量及CAS算法-上篇
Java并发之原子变量及CAS算法-上篇概述本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中式怎么保证变量原子性的呢?。对应Java中的包是:java.util.concurrent.atomic包下。因为涉及到了CAS算法,需要对CAS算法讲解及CAS算法三个问题怎么解决以及和Synchroized比较。文章比较长,所以就分为上下两个篇幅讲解。本文是...原创 2020-03-14 10:55:40 · 227 阅读 · 0 评论 -
Java并发之volatile关键字内存可见性问题
Java并发之volatile关键字内存可见性问题线程之间数据共享案例我们先来看一个场景:Main函数启动后,调用一个线程向list中添加数据。List的size为5的时候,设置变量flag为true.然后,主线程根据flag的值进行其他操作。代码如下:编辑运行结果:编辑我们发现,当子线程输出flag为ture后,主线程也没有输出==...原创 2020-03-12 09:48:15 · 216 阅读 · 0 评论 -
Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?
Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?在Java线程开发中,有几种方法开启线程?假如需要得到线程返回的信息怎么办?可以实现吗?凯哥将通过源码和大家一起分享下线程怎么将返回值带回来的。一:无返回值类型的1:继承Thread类2:实现Runnable接口这两种是大家常用的,代码demo就截图吧。1:继承Thread类的写法定义:一个类型需要exten...原创 2020-03-11 15:00:10 · 237 阅读 · 0 评论 -
Java多线程并发编程中并发容器第二篇之List的并发类讲解
Java多线程并发编程中并发容器第二篇之List的并发类讲解概述本文我们将详细讲解list对应的并发容器以及用代码来测试ArrayList、vector以及CopyOnWriteArrayList在100个线程向list中添加1000个数据后的比较本文是《凯哥分享Java并发编程之J.U.C包讲解》系列教程中的第六篇。如果想系统学习,凯哥(kaigejava)建议从第一篇开始看。从...原创 2020-03-17 10:50:01 · 559 阅读 · 0 评论 -
从火箭发射场景来学习Java多线程并发闭锁对象
从火箭发场景来学习Java多线程并发闭锁对象倒计时器场景在我们开发过程中,有时候会使用到倒计时计数器。最简单的是:int size = 5; 执行后,size—这种方式来实现。但是在多线程并发的情况下,这种操作会不安全的。举个现实中最典型的一个例子:火箭发射的案例。大家都看过火箭发射的直播吧。火箭在发送的时候,有很多设备需要检查是否都准备就绪。在总控室得到所有设备都准备就绪后,才会下达...原创 2020-03-18 10:03:55 · 363 阅读 · 0 评论 -
Java并发编程学习前期知识上篇
Java并发编程学习前期知识上篇我们先来看看几个大厂真实的面试题:从上面几个真实的面试问题来看,我们可以看到大厂的面试都会问到并发相关的问题。所以Java并发,这个无论是面试还是在工作中,并发都是会遇到的。Java并发包JUC(java.util.concurrent)有了解过哪些?并发包实现最重要的是什么?其原理是什么知道吗?何为JMM的可见性?volatiile关键字是...原创 2020-03-19 09:16:03 · 210 阅读 · 0 评论