1. 进程:
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的
一次执行过程,它是一个动态的概念。进程是一个具有一定独立功能的程序,一个实体,每一个进程都有它自己的地址空间。
case:
linux:ps -ef
window:任务管理器
2. 进程的状态
进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程具有以下三种基本状态。 粗体 1)就绪状态(Ready) 2)运行状态(Running) 3)阻塞状态(Blocked)
线程
线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干程序又可以划分成若干个线程。 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个线程(单线程程序)
Java 中最少有两个线程 main gc 垃圾回收器 一个程序可以同时执行多个任务,来提高效率。 例如:
(1)、同时下载多个电影 (2)、同时与多人聊天
并行:就是两个任务同时运行(多个CPU) 并发:是指两个任务同时请求运行,而处理器一次只能接受一个任务,就会把两个任务安排轮流执行,由于CP时 间片运行时间较短,就会感觉两个任务在同时执行
3. 程序运行原理
分时调度
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
抢占式调度
优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。 实际上,CPU(中央处理器)使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。
-
sleep:让线程进入休眠状态,让出CPU的时间片,不释放对象监视器的所有权(对象锁)
-
wait: 让线程进入等待状态,让出CPU的时间片,并释放对象监视器的所有权,等待其它线程通过notify方法来唤醒
4. thread的方法
静态的属性:
Static int MAX_PRIORITY 10 Static int MIN_ PRIORITY 1 Static int NORM_PRIORITY 5
构造方法: Thread() Thread(String name)
多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动
currrntThread().getName() 获取当前的线程的名字
5. 继承Thread类原理
Thread 类不是抽象类,具有开启线程的功能,不能直接去new ,没有线程的任务,而是要继承它,重写run(), 添加线程的任务. 建立了程序单独执行的路径,让多部分代码实现同时执行.并发
5.1创建线程方式—实现Runnable接口
Thread(Runnable target) 分配新的 Thread 对象。 Thread(Runnable target, String name) 分配新的 Thread 对象。
实现runnable接口的好处: 避免Thread单继承的局限 将线程和任务进行分离,解耦