并发与多线程
本文为学习《码出高效:Java开发手册》的 记录
目录
并发与多线程
1、并发与并行?两者的核心区别是什么?
并发:指在某个时间段内,多个任务交替处理的能力。
并行:指同时处理多个任务的能力。
核心区别:进程是否同时执行。
2、并发环境下的三个特点及其原因。
- 并发程序之间有相互制约的关系。
- 直接制约,一个程序需要另一个程序的计算结果。
- 间接制约,多个程序竞争共享资源。
- 并发程序执行的过程是断断续续的。
- 所以程序需要记忆现场指令和执行点。
- 在一定条件下(并发数设置合理且cpu拥有足够的处理能力时),并发会提高程序的运行效率。
线程安全
1、线程
- CPU调度与分派的单位;
- 拥有自己的操作栈、程序计数器、局部变量表等资源;
- 五种生命周期
- NEW,新建状态
- RUNNABLE,就绪状态
- RUNNING,运行状态
- BLOCKED,阻塞状态
- DEAD,终止状态
2、进程
- 一个进程中可以包含多个线程;
- 是系统进行资源分配和调度的基本单位;
3、创建线程的三种方式
- 继承自Thread类;不符合里氏代换原则,对外暴露的细节比较多。
- 实现Runnable接口;编程更灵活,让使用者专注于实现线程的run()方法上。
- Callable接口的call();Callable与Runnable有两点不同
- 可以通过call()获得返回值;前两种方式都不能直接获取执行结果。
- call()可以抛出异常;而Runnable只有通过setDefaultUncaughtExceptionHandler()的方式才能在主线程中捕捉到子线程异常。
4、三种阻塞状态
- 同步阻塞;锁被其他线程占用。
- 主动阻塞;调用Thread的某些方法,主动让出CPU执行权,比如sleep()、join()等。
- 等待阻塞;执行了wait()。
5、线程安全的四个维度及核心理念
核心理念:要么只读,要么加锁
四个维度
- 数据单线程可见;
- 只读对象;
- 线程安全类;
- 同步与锁机制;
6、Java并发包
主要分成4个类族
- 线程同步类;
- 并发集合类;
- 线程管理类;
- 锁相关类。
什么是锁
未完...