进程
进程的概念
进程就是正在运行的程序,他会占用对应的内存区域,由cpu进行执行与计算
进程的特点
独立性
进程是系统中独立存在的实体,他可以拥有自己的独立资源,每个进程都有自己私有的地址空间,在没有经过进程本身允许下,一个用户进程不可以直接访问其他进程的地址空间
动态性
进程与程序的区别在于,程序只是一个静态的指令集和,而进程是一个正在系统中活动的指令集和,程序加入了时间概念以后,成为进程,具有自己的生命周期和各种状态,这些概念都是程序所不具备的
并发性
多个进程可以在单个处理器cpu上并发执行,多个进程之间不会互相影响
线程
线程的概念
线程是操作系统os能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,一个进程可以开启多个线程,其中有一个主线程来调用本进程中的其他线程。
我们看到的进程的切换,切换的也是不同进程的主线程
多线程可以让同一个进程同时并发处理多个任务,相当于扩展了进程的功能
进程与线程的关系
一个操作系统中可以有多个进程,一个进程中可以包含一个线程(单线程程序),也可以包含多个线程(多线程程序)
多线程的特性
随机性
串行:同一时刻一个CPU只能处理一件事
并行:同一时刻多个CPU处理多个事
CPU分时调度
1.FCFS:先来先服务算法
2.SJS:短服务算法
线程的状态
就绪状态:线程已经准备好运行,只要获得CPU,就可立即执行
执行状态:线程已经获得CPU,其程序正在运行状态
阻塞状态:正在运行的线程由于某些事件(I/O请求等)暂时无法执行的状态,即线程阻塞
三态模型
五态模型
多线程编程方案1:继承Thread类
public class TestThread1 {
public static void main(String[] args) {
/*4.new对应的是线程的新建状态
* 5.要想模拟单线程,至少要启动两个线程,如果只启动一个,是单线程程序*/
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
MyThread t4 = new MyThread();
/*6.这个run()如果直接调用,是没有多线程抢占执行的效果的
* 只是业务方法看作是普通方法来调用,谁先写就先执行谁
*
* 7.start()对应的状态才是线程的就绪状态,它会把刚刚新建好的线程加入到就绪队列中,
* 至于什么时候执行,就是多线程抢占的效果,需要OS选中分配时间片才会执行
*
* 8.执行start()时,底层会自动调用我们重写的业务方法run()
*
* 9.线程执行具有随机性,也就说t1-t4具体怎么执行
* 取决于CPU调度时间片的分配规则,我们是决定不了的*/
t1.start();
t2.start