JUC
2020-08-25 16:00:04 0 举报
AI智能生成
JUC学习流程图
作者其他创作
大纲/内容
8、JUC强大的辅助类讲解
CountDownLatch
减少计数
减少计数
例子
原理
CyclicBarrier
循环栅栏
循环栅栏
例子
原理
Semaphore
信号灯
信号灯
例子
原理
9、ReentrantReadWriteLock
读写锁
读写锁
问题例子
加读写锁例子
10、BlockingQueueDemo
阻塞队列
阻塞队列
是什么
用处
种类
ArrayBlockingQueue:由数组结构组成的有界阻塞队列。
LinkedBlockingQueue:由链表结构组成的有界(但大小默认值为integer.MAX_VALUE)阻塞队列。
SynchronousQueue:不存储元素的阻塞队列,也即单个元素的队列。
PriorityBlockingQueue:支持优先级排序的无界阻塞队列。
DelayQueue:使用优先级队列实现的延迟无界阻塞队列。
LinkedTransferQueue:由链表组成的无界阻塞队列。
LinkedBlockingDeque:由链表组成的双向阻塞队列。
核心方法
11、ThreadPool线程池
为什么用线程池
例子
线程池的优势
如何使用
架构说明
编码实现
Executors.newFixedThreadPool(int)
Executors.newSingleThreadExecutor()
Executors.newCachedThreadPool()
代码
线程池七大参数
1、corePoolSize:线程池中的常驻核心线程数
2、maximumPoolSize:线程池中能够容纳同时
执行的最大线程数,此值必须大于等于1
执行的最大线程数,此值必须大于等于1
3、keepAliveTime:多余的空闲线程的存活时间
当前池中线程数量超过corePoolSize时,当空闲时间
达到keepAliveTime时,多余线程会被销毁直到
只剩下corePoolSize个线程为止
当前池中线程数量超过corePoolSize时,当空闲时间
达到keepAliveTime时,多余线程会被销毁直到
只剩下corePoolSize个线程为止
4、unit:keepAliveTime的单位
5、workQueue:任务队列,被提交但尚未被执行的任务
6、threadFactory:表示生成线程池中工作线程的线程工厂,
用于创建线程,一般默认的即可
用于创建线程,一般默认的即可
7、handler:拒绝策略,表示当队列满了,并且工作线程大于
等于线程池的最大线程数(maximumPoolSize)时如何来拒绝
请求执行的runnable的策略
等于线程池的最大线程数(maximumPoolSize)时如何来拒绝
请求执行的runnable的策略
线程池工作原理
生产环境使用
线程池的拒绝策略
是什么
JDK内置的拒绝策略
AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统正常运行
CallerRunsPolicy:“调用者运行”一种调节机制,该策略既不会抛弃任务,也不
会抛出异常,而是将某些任务回退到调用者,从而降低新任务的流量
会抛出异常,而是将某些任务回退到调用者,从而降低新任务的流量
DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加人队列中
尝试再次提交当前任务。
尝试再次提交当前任务。
DiscardPolicy:该策略默默地丢弃无法处理的任务,不予任何处理也不抛出异常。
如果允许任务丢失,这是最好的一种策略。
如果允许任务丢失,这是最好的一种策略。
在工作中单一的/固定数的/可变的三种创建线程池的方法哪个用的多?超级大坑
自定义线程池
12、Java8之流式计算复习
函数式接口
java.util.function
java内置核心四大函数式接口
子主题
实例
Stream流
是什么
特点
Stream 自己不会存储元素
Stream 不会改变源对象。相反,
他们会返回一个持有结果的新Stream。
他们会返回一个持有结果的新Stream。
Stream 操作是延迟执行的。这意味着
他们会等到需要结果的时候才执行
他们会等到需要结果的时候才执行
怎么做
阶段
创建一个Stream:一个数据源(数组、集合)
中间操作:一个中间操作,处理数据源数据
终止操作:一个终止操作,执行中间操作链,产生结果
源头=>中间流水线=>结果
13、分支合并框架
原理
相关类
ForkJoinPool
ForkJoinTask
RecursiveTask
实例
14、异步回调
原理
实例
1、JUC是什么
java.util.concurrent在并发编程中使用的工具类
进程/线程回顾
1进程/线程是什么?
2进程/线程例子?
3线程状态?
4 wait/sleep的区别?
5什么是并发?什么是并行?
2、Lock接口
synchronize
多线程编程模板
线程、操作、资源类
高内聚、低耦合
实现步骤
1、创建资源类
2、资源类里创建同步方法、同步代码块
例子:卖票
Lock
是什么
Lock接口的实现
ReentrantLock可重入锁
ReentrantLock可重入锁
使用
与synchronize的区别
创建线程方法
(实现Runnable)
(实现Runnable)
新建类实现runnable接口
匿名内部类
lambda表达式
3、Java8之lambda表达式复习
lambda表达式
是什么
要求
写法
函数式接口
接口中也可以有实现方法
default
静态方法实现
4、线程间通信
面试题:两个线程打印
多线程编程模板
1、判断(要用while)
2、执行
3、通知
synchronized实现
代码
换成4个线程
解决
java8新版实现
Condition
线程间定制化调用通信
能够精准通知
5、多线程锁
锁的8个问题
8锁分析
代码
6、集合不安全
例子
代码
线程不安全错误
原理
解决方案
Vector
Collections
写时复制
写时复制
不加锁性能提升但数据错误,加锁数据一致但性能下降
CopyOnWriteArrayList定义
CopyOnWrite理论
扩展类比
HashSet
HashMap
7、Callable接口
是什么
面试题:获得多线程的方法几种?
函数式接口
与Runnable接口对比
实现方法对比
怎么用
找“中间人”
FutureTask
是什么
原理
代码
0 条评论
下一页