![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
收破烂的小熊猫~
愿你走出半生,归来仍是少年。。
展开
-
JUC并发编程学习(十八) -搞懂单例模式
一个人不可能同时有2个女朋友,如果有,那就是渣男。什么是单例模式单例模式,顾明思议就是一个类只有一个实例,并且这个类负责创造自己的对象,同时确保只有单个对象被创建。这个类提供访问其唯一的对象的方式,我们在使用的时候可以直接调用其方法获取到,而不需要去实例化。首先,来说一下单例模式的核心思想,一般都会写一个私有的构造方法,和一个静态方法用于获取对象。 //单例模式核心思想,构造器私有! private SingleModel(){ //编写相关逻辑 } //静态方法,.原创 2020-07-11 12:07:30 · 245 阅读 · 0 评论 -
JUC并发编程学习(十七) -5分钟搞懂volatile
基本概念先补充一下概念,java内存模型中的可见性、原子性和有序性。可见性百度百科的讲解,是指对象间的可见性,含义是一个对象能够看到或者引用另一个对象的能力。可见性,是指线程之间的可见性,一个线程修改的值对另外一个线程是可见的。可以将可见性理解为一种通知机制也就是A线程修改了值,其他线程立马就知道修改的结果。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只原创 2020-06-27 17:48:58 · 282 阅读 · 0 评论 -
JUC并发编程学习(十六)谈谈java内存模型JMM
JMM:java内存模型(Java Memory Model ),不存在的东西,一个概念,约定在多线程环境下,线程之间要通信,就不得不提JMM(Java Memory Model )。JMM是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存的数据不一致、编译器会对代码指令重排、处理器会对代码乱序等带来的问题。内存划分JMM规定了内存主要划分为主内存和工作内存两种。此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在不同的层次上进行的。如果非要对应起来,主内存对应的是J.原创 2020-06-25 19:51:13 · 242 阅读 · 0 评论 -
JUC并发编程学习(十五)-异步回调之CompletableFuture
FutureFuture接口是Java多线程Future模式的实现,在java.util.concurrent包中,可以用来进行异步计算。Future模式是多线程中一种常用的模式。可以理解为:我有一个任务,把它交给Future去完成。在这期间我可以去做自己想干的事情,过段时间后,我可以直接去Future那提取结果。Future的接口主要有五个方法。public interface Future<V> { boolean cancel(boolean mayInterruptIf原创 2020-06-21 18:13:03 · 424 阅读 · 0 评论 -
JUC并发编程学习(十四)-任务拆分ForkJoin详解
分而治之思想在古代,皇帝要想办成一件事肯定不会自己亲自去动手,而是把任务细分发给下面的大臣,下面的大臣也懒呀,于是把任务继续分成几个部分,继续下发,于是到了最后最终负责的人就完成了一个小功能。上面的领导再把这些结果一层一层汇总,最终返回给皇帝。这就是分而治之的思想。什么是ForkJoin从JDK1.7开始,Java提供ForkJoin框架用于并行执行任务,它的思想就是将一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。简单的理解,ForkJoin是一个可对任务进行拆分,分而.原创 2020-06-14 14:23:58 · 607 阅读 · 2 评论 -
JUC并发编程学习(十三)-学习Stream流的使用
说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。传统集合的多步遍历代码几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如:import java.util.ArrayList;import j.原创 2020-06-10 22:03:43 · 350 阅读 · 0 评论 -
JUC并发编程学习(十二)-四大函数式接口
函数式接口有且只有一个抽象方法的接口。函数式接口,即适用于函数式编程场景的接口。而java中的函数式编程体现就是Lambda,所以函数式接口 就是可以适用于Lambda使用的接口。只要确保接口中有且只有一个抽象方法,而java中的Lambda才能顺利进行推导。格式只要确保接口中有且仅有一个抽象方法即可:修饰符 interface 接口名称{ public abstract 返回值类型 方法名称(可选参数信息); //其他非抽象方法内容}由于接口当中抽象方原创 2020-06-01 15:17:52 · 333 阅读 · 0 评论 -
JUC并发编程学习(十 一)-ThreadPoolExecutor线程池的学习
线程池的核心知识就是:三大方法、7个参数、拒绝策略、优化配置线程池原理程序运行的本质是,占用系统资源,CPU/磁盘网络使用。我们希望可以高效的使用资源!池化技术就是不断的演进出来的。池化技术简单的说,池化技术就是提前准备一些资源,以供使用。线程的创建和销毁,以及数据库的连接断开都十分浪费资源。只有是“池”,就会设计到两个常量:minSize:最小容量maxSize最大容量这些都是为了弹性访问,保证系统运行的效率。举一个常见的例子。去银行取钱,一般来说银行会固定开放2个窗口供人.原创 2020-05-30 18:00:23 · 350 阅读 · 0 评论 -
JUC并发编程学习(十)-阻塞队列、同步队列
BlockingQueue队列的特点:先进先出阻塞队列在拥有队列的基本特征的同时,还额外支持两个附加操作。这两个附加的操作支持阻塞的插入和移除方法。阻塞插入队列插入元素时,当队列空间已经使用满了,不得不阻塞阻塞移除队列中有元素,在取元素时可以移除,队列为空时,阻塞不能取出,等待队列中有新的元素才能取出。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。接口架构图原创 2020-05-27 19:41:37 · 453 阅读 · 0 评论 -
JUC并发编程学习(九)-读写锁
读写锁https://www.cnblogs.com/xiaoxi/p/9140541.html对共享资源进行读和写操作,且写的操作没有那么的频繁。在没有进行写的操作的时候,多个线程同时读取一个资源没有任何问题,所以可以同时允许多个线程读取共享资源。但是一个线程在进行写操作时,就不允许其他线程再对该资源进行读和写的操作了。针对这种场景,JAVA的并发包提供了读写锁ReentrantReadWriteLock,它表示两个锁,一个是读操作相关的锁,称为共享锁;一个是写相关的锁,称为排他锁(独占锁),描原创 2020-05-17 23:18:54 · 242 阅读 · 0 评论 -
JUC并发编程学习(八)-CountDownLatch、CyclicBarrier、Semaphore的使用
常用辅助类CountDownLatch减法计数器CountDownLatch:减计数器,使用场景:一间教室有6名学生,放学后一名学生负责锁门。只有等教室里人走完了,才会把门锁上。那怎么有效精准的控制什么时候锁门,使用CountDownLatch减法计数器有效控制。CountDownLatch主要用法:CountDownLatch downLatch=new CountDownLatch(6); //设置计数器初始值countDownLatch.countDown(); 出去一人(产生一个原创 2020-05-17 16:45:44 · 283 阅读 · 0 评论 -
JUC并发编程学习(七)-Callable学习
Callable线程的创建方式主要有Thread、Runnable、Callable这几种,那么他们的主要区别是:1.是否返回值?Runnable无返回值,而Callable有返回值。2.是否跑出异常?Runnable无异常,Callable有异常3.方法不同?Runnable 运行的方法是run,Callable运行的方法是call为了学习Callable,首先我们来写一个简单的线程,代码如下:package com.jp.call;import java.util.concur原创 2020-05-13 23:10:09 · 374 阅读 · 0 评论 -
JUC并发编程学习(六)-集合类不安全
集合类的安全问题,主要分为单线程和多线程情况下。1、List不安全list不安全单线程:安全import java.util.Arrays;import java.util.List;/*** @className:* @PackageName: com.jp.testlist* @author: youjp* @create: 2020-05-04 20:48* @de...原创 2020-05-06 20:10:44 · 334 阅读 · 1 评论 -
JUC并发编程学习(五)-8锁现象
以下名词解释:顺序执行:先调用的先执行;随机执行:没有规律,与计算机硬件资源有关,哪个线程先得到资源就先执行,各个线程之间互不干扰将从以下8个方面介绍锁现象1. 多个线程使用同一把锁-顺序执行2. 多个线程使用同一把锁,其中某个线程里面还有阻塞-顺序先执行3. 多个线程有锁与没锁-随机执行4.多个线程使用多把锁-随机执行5. Class锁:多个线程使用一个对象-顺序执行6. Class锁...原创 2020-05-06 11:15:17 · 364 阅读 · 4 评论 -
JUC并发编程学习(四)-生产者与消费者
生产者和消费者生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-bufferproblem),是一个多线程同步问题的经典案例。简单说明,就是一个类用于生产,一个类用于消费。生产者生产一定的数据放入管存区,然后重复此操作,同时,消费者消费缓存区的数据。生产者和消费者之间必须保持同步 。要保证生产者不会在缓冲区满时放入数据,消费者也不会在...原创 2020-05-05 14:58:56 · 355 阅读 · 0 评论 -
JUC并发编程学习(三)-Lock锁
多线程的编程模型这里是引用多线程编程的代码编写模型:1、高内聚,低耦合 :必须保证业务代码的高内聚、低耦合;2、线程去操作(调用对外暴露的方法) 资源类。这里使用一个卖票案例来说明传统的多线程下会出现的问题。3个售票员出售20张票。package com.juc.study.lockdemo;/*** @ClassName:* @PackageName: com.juc....原创 2020-05-05 14:34:58 · 357 阅读 · 0 评论 -
JUC并发编程学习(二)-进程和线程知识回顾
进程线程知识回顾进程:就是一个应用程序,如QQ.exe ,music.exe程序线程:一个进程中可能包含多个线程,至少包含一个。在java中一个应用程序至少有几个线程?2个, main线程、GC线程并行、并发是什么?并发:指两个或多个时间在同一时间段发生。并发就是是串行的同步,一个任务执行完成才执行下一任务;多线程、多个线程操作一个资源类,快速交替的过程。并行:指两个或多个...原创 2020-04-16 10:59:25 · 364 阅读 · 0 评论 -
JUC并发编程学习(一)-什么是JUC
什么是JUC?查看了一下jdk1.8的文档,可以看到packge下的java.util.concurrent包什么是JUC:java.util.concurrent包名的简写,是关于并发编程的API。与JUC相关的有三个包:java.util.concurrent、java.util.concurrent.atomic、java.util.concurrent.locks。也查看了一些前...原创 2020-04-16 10:39:48 · 6545 阅读 · 2 评论