1.进程:
进程是程序的一次执行过程,是系统运行程序的基本单位
系统运行一个程序即是一个进程从创建、运行、到消亡的过程
每个进程都有一个独立的内存空间,一个应用进程可以同时运行多个进程
【进程 其实就是应用程序的可执行单位.exe文件】
【每个进程都有一个独立的空间,一个应用程序可以同时运行多个进程】
2.线程:
是进程的执行单元,负责当前进程中程序的进行,一个程序中至少有一个线程
一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序
【线程 其实就是进程的可执行单元】
【每条线程都有独立的空间,一个进程可以同时运行多个线程】
3.多线程并行:
指的是多条线程在同一时刻同时执行(赛马,比赛跨栏等运动项目)
4.【多线程并发】:多条线程在同一时间交换执行
5.在Java中线程的调度是:抢占式调度
6.进程与线程的区别:
进程: 有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线程
线程: 堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小的多
7. 线程调度:
分时调度: 所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间
抢占式调度: 优先让优先级高的线程使用CPU,如果线程的优先级相同,那么就会随机选择一个,线程的随机性
Java使用的就是抢占式调度
8.Thread类的概述:
表示线程,也叫做线程类,创建该类对象,就是创建线程对象(也可以叫做创建一个线程)
线程的任务:执行一段代码
Runnable:接口,线程任务接口
9.Thread类的构造方法
线程要开启的话,需要用到java.lang.Thread类,API类中定义了有关线程的一些方法
- public Thread() 分配一个新的线程对象,线程名称是默认生成
- public Thread(String name) 分配一个指定名字的新的线程对象
- public Thread(Runnable target) 分配一个带有指定目标新的线程对象,线程名称是默认生成的
- public Thread(Runnable target,String name) 分配一个带有指定目标新的线程对象并指定了名字
10.创建线程的方式有【两种】
1.是通过继承Thread类的方式
2.是通过实现Runnable接口的方式
11.Thread类的常用方法
- public String getName() 获取当前线程的名称
- public void start() 导致此线程开始执行,Java虚拟机调用此线程的run方法
- public void run() 此线程要执行的任务在此定义代码
- public static void sleep(long millis) 是当前正在执行的线程以指定的毫秒数暂停(暂时停止该线程)
- public static Thread currentThread() 返回对当前正在执行的线程对象的引用
12.通过两种创建线程的方式后总结:
通过Runnable接口实现,使得实现类有了多线程的特征,run方法是多线程程序的一个执行目标,所有的多线程代码都在run方法中
实际上,Thread类也是实现了Runnable接口的类
在启动多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target)构造对象,然后调用Thread对象的start方法来循行多线程代码
实际上,所有的多线程代码都是通过运行Thread类的start方法来运行的
因此,不管是继承Thread类还是实现Runnable接口来实现多线程,最终还是通过Thread类的对象的API来控制线程的
因此,如果你是实现Runnable接口运行多线程的话,你需要知道:
Runnable对象仅仅作为Thread类对象的target,Runnable实现类包含run方法仅仅作为线程执行体
实际上,线程对象依然是Thread实例,只是该Thread线程负责执行其target的run方法而已