多线程脉络

• 并发产生的原因
	○ 可见性
	○ 原子性
	○ 有序性
• CPU
	○ ALG/寄存器/高速缓存
	○ 基于CPU模型分析并发问题原因
	○ 分时复用CPU
	○ CPU指令流水线优化
	○ 时间/空间局部性原理
• Java内存模型
	○ volatile顺序性
	○ volatile写先于读
	○ volatile传递性
	○ 锁-写先于读
	○ Start
	○ Join
• Volatile
	○ 禁用CPU缓存
	○ 禁用指令重排序
• 锁
	○ Synchronized
		§ 三种用法
		§ Wait/notify/notifyAll
		§ while范式
	○ ReentrantLock
	○ LockSupport
		§ LockSupport.unpark(Thread thread)
		§ LockSupport.park()
• 死锁
	○ 四个条件
	○ 四个破法
• 多线程三个问题
	○ 安全性问题
	○ 活跃性问题
		§ 活锁和饥饿
	○ 性能
		§ 阿姆达尔定律
		§ 无锁技术
			□ ThreadLocal
			□ CAS
			□ 乐观锁
		§ 减少锁持有的时间
• 管程模型
	○ ![](https://img2024.cnblogs.com/blog/1004117/202403/1004117-20240307150816813-294485905.png)
• 线程生命周期
	○ 操作系统线程
		§ 初始状态/可运行状态/休眠状态/运行状态/终止状态
		§ 休眠状态会释放CPU使用权,当等待事件出现了,才会变为可运行状态。
	○ Java线程
		§ NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WAITING/TERMINATED
		§ BLOCKED/WAITING/TIMED_WAITING 和操作系统的休眠状态一致。
		§ Java中RUNNABLE并不区分是否被CPU分配时间片执行。它全权交给操作系统去处理了。
		§ 可以使用JConsole或者Jstack来查看线程状态,检查死锁
• 创建多少线程合适
	○ 多线程主要就是提高IO和CPU的综合利用率,充分利用硬件。
	○ CPU密集型
		§ 因为是纯CPU运行,多少核就创建【核数+1】是最快的,再创建也只是增加线程切换的成本。
	○ IO密集型
		§ 最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)]
		§ 实际可以在测试中对服务器IO和CPU使用率做监控。
• 并发工具类
	○ ReentrantLock 
	○ Semaphore
	○ ReadWriteLock
	○ StempedLock
	○ CountDownLatch/CyclicBarrier
	○ 并发容器
		§ CopyOnWriteArrayList
			□ 在写入数据的时候,会Copy出一个数组,用于读,所以没有并发,但是读写会短暂不一致。
		§ ConcurrentHashMap
		§ ConcurrentSkipListMap
			□ 跳表,有序
		§ CopyOnWriteArraySet 
		§ ConcurrentSkipListSet
		§ Queue
			□ ArrayBlockingQueue
			□ LinkedBlockingQueue
			□ SynchronousQueue
			□ LinkedTransferQueue
			□ PriorityBlockingQueue 
			□ DelayQueue
	○ 无锁
		§ CPU支持CAS指令,作为一条CPU指令,本身能保证原子性。
		§ CAS范式 do {oldV = xxxx;newV = ...oldV...}while(!compareAndSet(oldV,newV);
		§ ABA问题
		§ 原子类概览->
		![](https://img2024.cnblogs.com/blog/1004117/202403/1004117-20240307150835403-1592360468.png)
		§ 优缺点:性能好,不会死锁,但会饥饿和活锁(自旋会反复重试),仅限于单个变量、引用、值的原子操作。
	○ 线程池
		§ 线程池生命周期与ThreadPoolExecutor的7个参数
		§ 让你自己设计一个线程池你要如何设计
		§ 生产者-消费者模式
		§ 自定义阻塞策略:Caller去执行、抛异常、丢任务、丢最老的任务。
		§ 从线程池获取执行结果:三个Submit方法使用、Future接口使用、FutureTask使用
posted @ 2024-03-07 15:09  来焕明  阅读(7)  评论(0)    收藏  举报