目录
1.程序 进程 线程的定义
-
程序: 一组静态的代码
-
进程: 一个处于运行状态的程序 。 进程 = 执行内存 + 线程
每当启动一个进程时,至少会有一个线程,称为:主线程
-
线程:程序运行的过程中,真正用来执行程序功能的那个单元
每当一个进程开启,都会产生一个主线程
可以根据设计需求,由主线程产生更多的子线程,共同完成程序的执行过程。
多线程的目的就是为了提高执行效率
2.创建线程
-
创建线程类 , 暂时2种方式
-
自定义线程类,实现Runnable接口,重写run方法 .
实现Runnable接口的类对象,允许被多线程单独运行。
-
自定义线程类,继承Thread父类,重写run方法
-
-
创建线程对象
-
new Thread()对象
-
run方法
-
run方法就是线程启动后,自动调用的方法。 就如同main方法是java程序启动后,自动调用的方法
-
我们在编码中,不能主动的调用run方法。一旦主动调用run方法,就不属于多线程操作
-
main方法是由主线程自动调用的, run方法就有子线程自动调用
-
子线程的启动需要一定的条件。
3.启动线程
-
线程对象在执行时,会自动调用run方法
-
如果(手动)主动的调用run方法,那不属于线程操作,只属于简单的面向对象操作。
-
从计算机底层来讲,真正能够执行代码指令的是CPU
-
当线程对象执行并能够处理代码指令时,也就说明线程对象获得了CPU(操作系统)
-
Java支持的抢占式获得CPU
-
线程抢到cpu会执行,执行一会就回释放cpu,再重新争抢。
-
所以多线程的执行顺序是不确定。
-
线程创建之后,必须启动才能开始争抢CPU
-
这里我们所谓的启动线程,不是执行线程,是让线程开始争抢cpu
-
如何启动线程呢?
-
调用
thread.start()
狭义多线程 和 广义多线程
-
有多个线程对象,但只有1个cpu 。 称为广义多线程
-
有多个线程对象,有多个cpu(处理器数量)
4.线程优先级
-
线程的执行过程是需要抢占CPU的
-
可以通过设置线程的优先级来提高线程抢占CPU的几率
-
调用
a.setPriority();
设置优先级优先级的值1到 10
所有新创建的线程,默认的优先级都是5
5.精灵线程(守护线程)
-
所有新创建的线程,称为用户线程
如果主线程执行完毕,但用户线程没有执行完毕,主线程会等待用户线程执行完后在关闭程序
-
守护线程是用来守护主线程的,只要主线程执行完毕,所有的守护线程立刻结束,关闭程序
-
调用
a.setDaemon(true);
设置线程是否为守护线程