多线程
2023-04-03 21:53:42 0 举报
AI智能生成
简单记录高并发相关的知识点
作者其他创作
大纲/内容
线程
什么是线程
线程与进程区别
线程安全问题
自增运算线程不安全
并发操作三大问题
Thread
线程状态
NEW
RUNNABLE
BLODED
WAITING
TIME_WAITING
TERMINATE
线程操作
线程名称的设置或获取
sleep
sleep(long millis)
sleep(long millis, int nanos)
interrupt
join
yield
daemon
ThreadLocal
基本使用
set(T val)
T get()
remove()
使用场景
线程隔离
跨函数传递数据
ThreadLoclMap
Entry
T initialValue(){return null;}
问题
锁
java内置锁
synchronized
synchronized执行过程
Object的“等待”-“通知”
内置锁的状态
无锁
偏向锁
轻量级锁
重量级锁
内置锁优缺点
JUC显示锁
Lock接口
ReentrantLock
锁使用套路
Condition接口
LockSupport工具类
LockSupport与Thread.sleep对比
LockSupport与Object.wait()对比
显示锁分类
可重入锁
不可重入锁
悲观锁
问题
乐观锁
通过CAS自旋实现乐观锁
CLH自旋锁
公平锁
非公平锁
共享锁
Semaphore信号量
CountDownLatch倒数闩
独占锁
可中断锁
不可中断锁
AQS
关键信息
资源共享方式
Exclusive 独享锁
Share 共享锁
AQS钩子方法
AQS模板方法
JUC容器
LIst
CopyOnWriteArrayList
set(int, E)
add(E)
getArray()
setArray(Object[] a)
Map
ConcurrentHashMap
Set
SortedSet
Queue
BlockingQueue
ArrayBlockingQueue
添加
put(E e)
offer(E e, long timeout, TimeUnit t)
offer(E e)
add(E e)
删除
take()
poll()
poll(long timeout, TimeUnit t)
take();
获取(不删除)
E peek();
E element();
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
SynchronousQueue
CompletableFuture
CompletionStage接口
方法分类
创建子任务
获取结果
串行处理
合并处理
异步任务的选择执行
ForkJoinPool
进程
什么是进程
什么是java进程
线程创建方式
new Thread()
实现Runnable接口,作为Thread的target对象
FutureTask与Callable结合,futureTask作为Thread的target对象
线程池
静态工厂类Executors创建
创建单一线程池
创建固定线程池
创建可缓存线程池
创建可调度线程池
ThreadPoolExecutor
自由定制线程池
线程池
Executor接口
ExecutorService接口
AbstractExecutorService
ThreadPoolExecutor
标准创建方式参数
corePoolSize 核心线程数
maximumPoolSize 最大线程数
keepAlive 空闲线程存活时间
unit 存活时间单位
workQueue 任务队列
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
threadFactory 线程工厂
handler 任务拒绝策略
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
CallerRunsPolicy
向线程池提交任务
有返回值
Future<?> submit(Runnable task)
<T> Future<T> submit(Runnable task, T result)
<T> Future<T> submit(Callable<T> task)
无返回结果
void execute(Runnable command);
线程池任务调度流程
调度器的钩子方法
protected void beforeExecute(Thread t, Runnable r) { }
protected void afterExecute(Runnable r, Throwable t) { }
protected void terminated() { }
线程池关闭方式
shutdown()
shutdownNow()
awaitTermination()
ScheduledExecutorService
ScheduledThreadPoolExecutor
优点
如何确定线程池数量
IO密集型
CPU密集型
混合型
CAS
CAS无锁编程
Atomic原子操作包
基本原子类
AtomicInteger
常用api
线程安全原理
数组原子类
引用原子类
AtomicReference
属性更新原子类
AtomicIntegerFieldUpdater
提升并发场景CAS效率
弊端
ABA问题
只能保证一个共享变量之间的原子性操作
开销问题
LongAdder
volatile关键字
CPU缓存结构
并发三大问题
原子性问题
可见性问题
总线锁
缓存锁
有序性问题
volatile
JMM
JMM和JVM区别
模型概念
主存
工作内存
8个操作
如何解决有序性
高并发设计模式
生产者-消费者模式
Master-Worker模式
ForkJoin
线程安全的单例模式
懒汉模式:双重锁+volatile实现
0 条评论
下一页