进程
指内存中的应用程序,每个进程都有独立的内存空间。(但是很多软件是多进程的,每个进程有自己的堆栈,且互不共享)
- 既可以同时播放音乐 又可以 同时接受输入的软件
线程
- 进程中的一个执行路径(一个进程中至少有一个线程),共享一个内存空间,线程之间可以自由切换(让一个休息,一个继续),并发执行。【无线程的进程就是即将结束的进程】
- 线程实际上是在进程之内的进一步划分,一个进程启动后,内部的若干执行路径
线程调度
分时调度
轮流使用,平均分配
(合理的交替执行任务)
抢占式调度
优先让优先级高的线程使用CPU,如果线程的优先级相同,那么随机选择一个线程,java使用的就是抢占式调度。 (实际上: CPU中使用抢占式调度时是在多个线程中高速切换的,某时刻而言,对于CPU的一个核心,只能执行一个线程。)
实际上,多线程程序并不能提高程序运行速度,但能提高程序运行效率,让CPU使用率更高。(只有一个核心的情况下,五件事情来回切换完成和五件事情排队完成没有速度上的区别)
优先级越高,抢占时间片的概率越大,执行该线程的概率越大。
同步
排队执行,效率低但是安全
异步
同时执行,效率高但数据不安全
例如:一个线程修改了数据大小,本来一个条件
并发
两个或多个事件在同一个时间段内发生 (比如说 10 秒内的并发事件)【容易实现】
并行
两个或多个时间在同一个时刻发生(很难实现)
中断
一个线程的中断与否,应该由线程自身决定,线程启动以后 它的一生就被安排好了,内存占用和释放应该在内部完成,不应该从外部关闭或者中断。线程可以标记某个属性,然后在某个时刻借助属性抛出异常,然后程序员处理异常来引起中断