javaSE 笔记 进程/线程

进程与线程

进程:是正在运行的程序
是系统进行资源分配和调用的独立单位
每一个进程都有它自己的内存空间和系统资源

线程:是进程中的单个顺序控制流,是一条执行路径
单线程:一个进程如果只有一条执行路径,则称为单线程程序,比如记事本程序,页面设置不做完,不能继续输入东西。
多线程:一个进程如果有多条执行路径,则称为多线程程序,比如扫雷,玩游戏和时间计时器分开运行的。

继承Thread类的方式实现多线程

创建一个新的执行线程有两种方法,,一个是将一个类声明为Thread的子类,并重写Thread的run方法。
启动线程的话run方法不行,得使用start()方法。

设置和获取线程名称

void setName(String name) 将此线程的名称更改为等于参数name
void getName(); 返回此线程的名称
P326可以看到getName是怎么获取到线程的默认名称的,最终是通过Thread的无参构造来定义的默认名字。
static Thread currentThread()返回对当前正在执行的线程对象的引用

线程优先级

线程有两种调度模型:
1.分时调度模型:所有线程轮流使用 CPU的使用权,平均分配每个线程占用CPU的时间片
2.抢占式调度模型,优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,
优先级高的线程获取的CPU时间片相对多一些,并不是代表着每次都是高优先级的线程优先使用CPU
多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的。

Thread 类中设置和获取线程优先级的方法:
public final int getPriority() 返回此线程的优先级
public final void setPriority(int newPriority) 更改此线程的优先级 优先级从1 - 10 ,默认为5

线程控制

static void sleep(long millis) 使当前正在执行的线程停留(暂停执行)指定的毫秒数
void join()等待这个线程死亡
void setDaemon(boolean on)将此线程标记为守护线程,当运行的线程都是守护线程时,java虚拟机将退出
守护线程的意思是,当主线程执行完毕后,只剩守护线程的话,java虚拟机就应该退出。至于主线程如何设置,参考P328
Thread.currentThread().setName("刘备")

线程生命周期

多线程的实现方式

除了之前提到的将一个类继承Thread类,还有一个方法,即声明一个实现Runnable接口的类,那个类然后实现了run方法。然后可以
分配类的实例,在创建Thread时作为参数传递(意思是将声明的那个类,作为参数传递给Thread构造方法),并启动。(这样不影响它继承其他的类)
在定义MyRunnable的时候,因为没有继承Thread类,所以不能直接调用getName()方法,只能用Thread.CurrentThread().getName
MyRunnable my = new MyRunnable();
Thread t1 = new Thread(my)
因此多线程实现方案有两种,一种是 继承Thread类,一种是 实现Runnable接口

posted @ 2021-09-01 16:35  Lanezzz  阅读(48)  评论(0)    收藏  举报