文章目录
一、线程
1.进程
- 操作系统分配资源的单元
- 运行中的程序
2.线程
- CPU调度的最小单位
- 一个具体的执行单元(任务)
3.多线程
- 就是一个进程内,允许有多个线程,同时执行
- 优点:提高了CPU的利用率,增强了程序的功能
- 缺点:对硬件要求高(CPU,内存,硬盘)
- 线程安全:多线程访问同一个共享资源
4.线程创建方式
- 继承Thread
- 实现Runnable接口
- 实现Callable接口,call()可以抛出异常,有返回值
- 线程池
5.线程状态
- 新建:当一个Thread类或者子类的对象被声明或创建时,新生的线程对象处于新建状态
- 就绪:处于新建状态的线程被Start后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源
- 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,**run()**方法定义了线程的操作和功能
- 阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态
- 死亡:线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束
6.多线程安全问题
- eg:
- 卖票,取款,秒杀,抢购
- 解决:加锁,排队
7.守护线程
8.线程间通信
二、并发编程
1.并发和并行
- 并发:同一时间如何应对事情(一个CPU采用时间片执行多个任务)
- 并行:同时做多件事情(多个CPU执行多个任务)
- 多线程访问同一个共享资源,线程安全问题,因为现在CPU是多核的,可以同时执行多个线程
2.安全问题
- 性能
- 死锁
- 原子性,有序性,可见性
3.CPU内存模型的问题
- 1.CPU---------内存----------IO(硬盘)
- 三者之间读写速度有差别
- CPU提供了缓存
- 任务细化到线程,切换执行
- 2.CPU对我们指令代码的顺序进行优化(重排)
- 3.JMM内存模型
- 当多个处理器在运算任务
- 访问同一个内存区时
- 将可能会得到不同的缓存数据,
4.线程安全问题
- 可见性,有序性,原子性
- 可见性:
- 不同线程中,有一个缓存,缓存要操作的变量,
- 为了提高效率,会等所有操作完成后,在将数据写入内存中
- 当数据还未写入主内存时,其他线程对其不可见
- a++问题
- 有序性:
- 指程序按照代码的顺序执行,
- CPU会对我们