目录
- 概述
- 线程和进程
- 并发和并行
- 线程上下文切换
- 线程的一生
- wait与sleep的区别
- 结束
概述
线程和进程
- 进程:是指内存运行的一个应用程序,是系统运行程序的基本单位,是程序的一次执行过程
- 线程:是进程中的一个执行单元,负责当前进程中任务的执行,一个进程会产生很多线程
两者主要区别:每个进程都有独立内存空间。线程之间的堆空间和方法区共享,线程栈空间和程序计数器是独立的。线程消耗资源比进程小的多。
并发和并行
- 并发Concurrency:同一时间段,多个任务都在执行,单位时间内不一定是同时执行。
- 并行Parallel:单位时间内,多个任务同时执行,单位时间内一定是同时执行。
- 并发是一种能力,并行是一种手段
注意: 并行处理是基于硬件CPU的是固定的,而并发处理的能力是可以通过设计编码进行提高的。
线程上下文切换
一个CPU同一时刻只能被一个线程使用,为了提升效率CPU采用时间片算法将CPU时间片轮流分配给多个线程。在分配的时间片内线程执行,如果没有执行完毕,则需要挂起,将CPU让给其它线程。
过程:
- 1.CPU切换线程,会将当前线程的执行位置记录下来,用于下次执行时找到准备位置
- 2.线程执行位置的记录与加载过程就叫做上下文切换
- 3.线程执行位置记录在程序计数器
线程的一生
线程的生命周期六种状态:
- new (新建)
- runnable (可运行)
- terminated (终止)
- blocked (锁阻塞)
- waiting (无限等待)
- timed_waiting (超时等待)
wait与sleep的区别
- 主要区别:sleep() 方法没有释放锁,wait()方法释放了锁
- 两者都可以暂停线程执行:wait()常用于线程间交互/通信,sleep()用于暂停线程执行
- wait()方法被调用后,需要别的线程调用同一个对象的notify和notifyAll,超时苏醒使用wait(long)
- sleep()方法执行完成后,线程会自动苏醒。
结束
并发编程基础概念就结束了,如有疑问,欢迎评论区留言。