高并发线程
2021-06-22 19:18:22 12 举报
AI智能生成
课程笔记
作者其他创作
大纲/内容
概念
进程
资源分配的基本单位
线程
执行的基本单位
程序
可执行性文件 .exe
调用线程
重写run()
extends Thread
implements Runnable
重写call()
implements Callable<>
线程分配
Nthread = Ncpu * Ucpu * (1+w/c)
Ncpu
核数目:Runnable.getRunTime().availableProcessors()得到
Ucpu
期望的cpu利用率
w/c
等待时间与计算时间的比率
线程的六种状态
NEW
线程刚创建,还未启动
RUNNABLE
可运行状态,由线程调度器安排执行
Ready
Running
WAITING
等待被唤醒
TIMED WAITING
隔一段时间后自动唤醒
BLOCKED
被阻塞,正在等待锁
TERMINATED
线程结束
如何优雅结束一个线程
interrupt()
打断(干扰)某个线程,设置标志位
IsInterrupted()
查询某线程是否被打断过,查询标志位
static interrupted()
查询当前线程是否被打断过,并重置打断标志
interrupt()无法干扰synchronized和Lock.lock抢锁过程
若想打断正在竞争锁的过程,使用ReentrantLock.lockInterruptibly()
并发编程的三大特性
可见性
volitile
保障线程可见性,线程本地缓存互相保持同步
cache line
64 bits
MESI cache
有序性
对象的创建过程
this逸出
中间状态
不要在构造方法start线程
汇编码
乱序存在的条件
as-if-serial
不影响单线程的最终一致性
原子性
Java线程与常用线程池体系
Executor
线程池顶级接口
ExecutorService
线程池次级接口
ScheduledExecutorService
增加定时任务相关功能
AbstractExecutorService
抽象类
ThreadPoolExecutor
普通线程类
ScheduledThreadPoolExecutor
定时任务线程池
ForkJoinPool
新型线程池
运用于大任务拆小任务,任务无限多的场景
Executors
线程池工具类,定义了一些快速使用线程池的方法
0 条评论
下一页