![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC的总结
文章平均质量分 68
是小晴晴呀
努力成长加油
展开
-
面试详细讲解 Lock 和Synchronized 的使用区别
五个角度:1.构成 2. 使用方法 3.是否可被打断 4.加锁是否公平 5.是否绑定条件记住:锁使用的三部曲 资源类 ,判断,干活,通知线程操作资源类, 判断使用while 防止出现虚假唤醒...原创 2022-05-09 17:26:24 · 72 阅读 · 0 评论 -
12. 异步回调
CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息类中的具体引用类以及接口:CompletableFuture 实现了 Future, CompletionStage 接口,实现了 Future接口就可以兼容现在有线程池框架,而 CompletionStage 接口才是异步编程的接口抽象,里面定义多种异步方法,通过这两者集合.原创 2021-12-15 09:10:46 · 271 阅读 · 0 评论 -
11. Fork与Join分支
将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果该算法相当于递归,且是二分查找思路八种基本排序问题 (第六篇 归并排序)图文详解_想成为大神说32的博客-CSDN博客class Fibonacci extends RecursiveTask<Integer> { final int n; Fibonacci(int n) { this.n = n; } Integer compute() { if (n <= 1)原创 2021-12-15 09:10:31 · 229 阅读 · 0 评论 -
10. 线程池
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用线程池(英语:thread pool)一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度特点: 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的销耗。 提高响应速度: 当任务到达时,任务可以不需要等待线程创...原创 2021-12-15 09:10:08 · 744 阅读 · 0 评论 -
9. 阻塞队列
阻塞队列是共享队列(多线程操作),一端输入,一端输出不能无限放队列,满了之后就会进入阻塞,取出也同理 当队列是空的,从队列中获取元素的操作将会被阻塞 当队列是满的,从队列中添加元素的操作将会被阻塞 试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素 试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增9.1 种类1.ArrayBlockingQueue基于数组...原创 2021-12-14 22:00:21 · 732 阅读 · 0 评论 -
8. 读写锁
回顾悲观锁和乐观锁的概念悲观锁: 见字知意,他是干什么都很悲观,所以在操作的时候,每次都上锁,使用时解锁乐观锁:他很乐观,多线程,并不上锁,但是会发生 线程安全问题表锁:整个表操作,不会发生死锁行锁:每个表中的单独一行进行加锁,会发生死锁读锁:共享锁(可以有多个人读),会发生死锁写锁:独占锁(只能有一个人写),会发生死锁关于读写锁读写锁:一个资源可以被多个读线程访问,也可以被一个写线程访问,但不能同时存在读写线程,读写互斥,读读共享读写锁ReentrantReadWriteLock读锁为原创 2021-12-14 21:55:35 · 1073 阅读 · 0 评论 -
7. JUC强大辅助类(减少计数CountDownLatch,循环栅栏CyclicBarrier,信号灯Semaphore)便于解决并发功能
该辅助类主要讲述三个减少计数CountDownLatch 循环栅栏 CyclicBarrier 信号灯Semaphore7.1 CountDownLatch该类的构造方法为CountDownLatch(int count)构造一个用给定计数初始化的CountDownLatch在这里插入代码片两个常用的主要方法await() 使当前线程在锁存器倒计数至零之前一直在等待,除非线程被中断countDown()递减锁存器的计数,如果计数达到零,将释放所有等待的线程CountDownLatch ..原创 2021-12-14 21:39:44 · 435 阅读 · 0 评论 -
6. Callable接口
创建线程的多种方式:继承Thread类 实现Runnable接口 Callable接口 线程池目前学习了有两种创建线程的方法,一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程,但是,Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能,Java 中提供了 Callable 接口比较Runnable接口和Callable接口 1.Callable中的call()计算结果,如果无法计算结果,会抛...原创 2021-12-14 20:58:28 · 83 阅读 · 0 评论 -
JUC高并发编程的学习,知识点详细概括
一.Lock 接口的概述原创 2021-12-14 20:01:24 · 1229 阅读 · 0 评论 -
5. 多线程锁 (公平锁和非公平锁,死锁,可重锁)
某一个时刻内,只能有唯一 一个线程去访问这些synchronized 方法所有的静态同步方法用的也是同一把锁——类对象本身,这两把锁是两个不同的对象,所以静态同步方法与非静态同步方法之间是不会有竞态条件的但是一旦一个静态同步方法获取锁后,其他的静态同步方法都必须等待该方法释放锁后才能获取锁,而不管是同一个实例对象的静态同步方法之间,还是不同的实例对象的静态同步方法之间,只要它们同一个类的实例对象 synchronized 锁的是方法,则是对象锁 同个对象锁的机制要等待,不同对象锁的机制调...原创 2021-12-14 19:39:38 · 362 阅读 · 0 评论 -
4. 集合 的线程安全 (可以看到底层的集合是没有加锁的)
4.1集合不安全的问题在讲解线程安全的之前,先看线程不安全的 实例 创建 ArrayList集合 并使用线程 再集合中添加元素获取元素//创建ArrayList集合List<String> list = new ArrayList<>();for (int i = 0; i <30; i++) { new Thread(()->{ //向集合添加内容 list.add(UUID.randomUUID().t...原创 2021-12-14 19:28:15 · 1836 阅读 · 0 评论 -
3 . 线程间定制化通信 (交替完成规定的工作)
案列:启动三个线程,按照如下要求:AA打印5此,BB打印10次,CC打印15次,一共进行10轮具体思路:每个线程添加一个标志位,是该标志位则执行操作,并且修改为下一个标志位,通知下一个标志 位的线程创建一个可重入锁private Lock lock = new ReentrantLock();分别创建三个开锁通知 private Condition c1 = lock.newCondition();(他们能实现指定唤醒)(注意)具体资源类中的A线程代码操作上锁,(执行具体操作(...原创 2021-12-14 18:56:17 · 242 阅读 · 0 评论 -
2.什么是线程间的通信 ?怎么实现线程通信
2.1什么是线程通信以及实现步骤线程间通信的模型有两种:共享内存和消息传递 线程通信其实就是 ,实现线程的交替工作,并传递信息线程间的通信具体步骤:(涉及上中下部)创建资源类,在资源类中船舰属性和操作方法 在资源类操作方法:判断、操作、通知 创建多个线程,调用资源类的操作方法 防止虚拟唤醒问题 (if 判读,只会判断一次)2.2 synchronized案例操作线程的时候,等待线程使用wait()通知另外的线程操作用notify()、notifyAll()假设...原创 2021-12-14 18:50:14 · 3072 阅读 · 3 评论 -
1. Lock (锁的)接口
目录1.1 复习synchronized1.2 Lock接口1.3 Lock方法1.4 两者差异1.1 复习synchronized 他是Java的关键字,是一种同步锁,能够修饰 一个 对象,变量,方法, 来控制这个所修饰的,被顺序的访问,多线程的编程步骤: 第一:创建一个资源类,属性和操作方法 第二:创建多线程,调用类里面的操作方法结合synchronized 锁 和 多线程的编程步骤实现卖票的功能 :(高内聚低耦合)package...原创 2021-12-13 15:44:37 · 609 阅读 · 0 评论 -
JUC的概述,线程与进程的概念和状态,
进程: 数据集合 在 一个程序 的一次运行线程: 一个进程的 很多小分支,完成不同工作线程的状态(他是枚举的类型)Thread.StateNew 新建Runnable 准备就绪 (调用了线程的Start ,放入线程池)Running 可运行的 (获得cpu 时间片)Blocked 阻塞 (等待,同步,异步,其他的阻塞方式)Waiting (一直)等待 Timed-Waiting (过时不候的等待)Dead (Term...原创 2021-12-13 13:28:40 · 860 阅读 · 0 评论