线程基础知识
1.多线程概述
进程:
正在运行的程序,是系统进行资源分配和调用的独立单位。
每一个进程都有它自己的内存空间和系统资源。
理解:一个正在运行的软件
线程:
是进程中的单个顺序控制流,是一条执行路径
一个进程如果只有一条执行路径,则称为单线程程序。
一个进程如果有多条执行路径,则称为多线程程序。
举例:阿里云盘(进程)中多个同时进行的任务,每一个任务可以看作一个线程
2.如何创建一个线程对象呢?
a. 自定义线程类继承Thread类,重写run方法
b. 自定义线程类实现Runnable接口,实现run方法
3.如何启动一个线程呢?
调用start()方法启动
注意:
1、启动一个线程的时候,若直接调用run方法,仅仅是普通的对象调用方法,按照自上而下的顺序执行,底层不会额外的创建一个线程再执行
2、从执行的结果上来看,java线程之间是抢占式执行的,谁先抢到cpu执行权谁就先执行
3、每次运行的结果顺序不可预测的,完全随机的
4、每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。
4.线程有两种调度模型:
分时调度模型
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片
抢占式调度模型
优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些。
Java使用的是抢占式调度模型。
演示如何设置和获取线程优先级
public final int getPriority()
public final void setPriority(int newPriority)
5.我们已经知道了线程的调度,接下来我们就可以使用如下方法对象线程进行控制
线程休眠
public static void sleep(long millis)
Thread.sleep();
当线程处于休眠状态的时候,该线程就没有cpu执行权了,若这时还有其他的线程,会被抢走cpu执行权。
线程加入
public final void join()
例:t1.join(); // 其他线程等待该线程执行结束,其他线程之间会进行抢占式执行
线程礼让
public static void yield()
Thread.yield(); //只是为了运行结果看起来均匀一些
后台线程
public final void setDaemon(boolean on)
中断线程
public final void stop()
t1.stop()停止程序
public void interrupt()
中断一会,当休眠时间结束时,程序继续进行

浙公网安备 33010602011771号