学习方法
学习技术的方法都很类似,大部分都有着类似的步骤:
- 场景
- 需求
- 解决方案
- 应用
- 原理
并发的目的
- 充分利用CPU 和 I/O资源
- 提高效率
并发的维度
- 分工
- 同步/协作
- 互斥
分工
- 线程池
- fork/join
- future
- Guarded Suspension 保护性暂挂模式
- Balking模式
- Thread per Message 模式
- 生产者-消费者模式
- Worker thread模式
- 两阶段终止模式
-其他模式
同步/协作
- 信号量
- Monitor
-
- Synchronized
-
- condition & lock
- CountDownLatch
线程的5个状态
线程的生命周期中,存在着以下几个状态:
- new:创建线程,此时只是一个对象,线程并没有产生
- runnable:new之后的线程,通过start()方法开始,进入runnable 状态。即可执行状态,他是running状态的预备状态,等待cup的调度
- running:
- blocked:所阻塞状态
- terminated:线程结束的状态,导致原因:
-
- 1、线程正常结束,结束生命周期;
-
- 2、JVM crash
-
- 3、线程运行出错
进程和线程的区别
进程是受操作系统管理的基本运行单元
线程是在进程中独立运行的子任务
进程间如何通讯,线程间如何通讯
多线程特点
- 可以在同一时间内运行更多不同种类的任务
- 多线程是异步的
- 线程的调用是随机的
测试上下文切换次数和时长
- Lmbench3 测试时长
- vmstat 测试切换次数
减少上下文切换
- 无法并发编程
- CAS算法
- 使用最少线程,线程池
设计思想
模板模式
每个线程Thread 步骤都是 start->run 其中run的实现细节由实现类决定,即模板模式
策略模式
接口只是定义(策略)的本身,实现子类可以选择不同的实现逻辑。
好比说:支付,接口我只定义支付pay这个方法,子实现类1可以是支付宝支付的方式;子实现类2可以是微信支付的方式;
在Thread类中,Thread的创建一般都是说有两种,
- 一种是创建Thread,
- 一种是实现runnable接口。
- callable
其实本质上前者是重写run方法,后者是实现runnable接口中的run(), 并把实例作为构造Thread的参数
Runnable接口即是策略模式的体现
JDBC中 查询