并发与多线程

本文为学习《码出高效: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个类族

  • 线程同步类;
  • 并发集合类;
  • 线程管理类;
  • 锁相关类。

 

什么是锁

未完...