进程
1.进程与线程
- 进程:
进程是需要通过系统的分配,获取系统当前的CPU,内存,显卡,网络等这些资源
1.独立性
2.互斥性
- 线程:
线程是组成进程的最小基本单位,每一个进程至少得有一个线程
线程的运行支撑起来进程的运行
线程的特性:
- 1.抢占式运行【重点】
CPU在执行的时候,是按照时间片进行执行的。单位的时间片是相互抢占的 40ms
2…资源共享性
一个应用程序中的线程可以共享当前的资源。比如CPU,内存,网络
Java程序:
一个java程序就是一个进程 Demo1main主函数 属一个应用程序
一个java应用程序至少有两个线程:
1.main主函数线程
2.jvm 垃圾回收
- 进程和线程的区别【面试题】
进程是一个完整的程序
线程是进程里面的执行的一个功能。
一个应用程序是由多个线程组成的
进程申请是系统的资源
线程申请是进程的资源
多个线程在执行的时候,cpu会根据每个线程分配的时间片聊来随机抢占执行
每个线程最多占用的时间片大概是20ms,过了时间片,就切换到其他线程了
2.并发和并行
并发:同时发生,轮流交替执行
并行: 真正意义上的同时执行
3.创建线程的两种方式
- 第一种创建方式
Thread类:
1.声明一个Thread的子类,重写run方法
2.调用start开启线程
- 第二种创建方式【开发中用的】
1.写一个类去实现Runnable接口,实现run方法
2.实例化Thread类,然后构造器的参数是一个实现Runnable接口的对象
4.线程下面的方法
构造方法:
- | Thread() | 分配一个新的Thread对象 |
| ------------------------------------ | -------------------------------------------- |
| Thread(Runnable target) | 分配一个新的Thread对象。 |
| Thread(Runnable target, String name) | 分配一个新的 Thread对象,并对当前线程起个名字 |成员方法:
static Thread currentThread();获取当前线程对象
static Thread currentThread();获取当前线程对象
getName();获取线程的名字
void setName(String name);设置当前线程的名字
void setPriority(int newPriority);设置当前线程的优先级。这个优先级只会增加线程执行的概率
但是真正的会不会优先不一定。int类型的参数,所有线程默认的优先级是5 传值 1-10 1的优先级是最低的,10优先级是最高的
int getPriority();获取当前线程优先级的
setProioty();设置线程优先级的
static void sleep();让线程休眠多少毫秒
在run方法中调用Thread.sleep();只能try-catch不能抛
5.线程的生命周期
线程创建好以后,开启线程start 方法,可运行状态,运行状态,阻塞状态,消亡
创建开启线程: start()
可运行状态:线程在抢占在等待,如果抢到的话就接着往下执行,如果没有抢到就等待
运行状态:真正的执行线程下面run方法
阻塞状态:锁,sleep, wait
消亡状态:线程执行结束以后