说起线程,咱们得先了解一下几个词语:线程,进程,程序,多线程,多进程。
- 程序:是操作系统中实现多个功能的代码块,也叫软件
- 进程:计算机上正在运行的程序
- 线程:进程内的一个执行单元,也是进程内的可调度实体
- 多进程:在计算机中并发运行的运行的多个进程
- 多线程:在单个程序中同时运行多个线程完成不同的工作
- 并发:计算机的cpu在运行程序的时候,会将时间划分为多个时间片段,而在这些时间片段中,每个时间片段中只能执行一个线程,对于线程来说,它们执行的时候是断断续续,走走停停的,但在宏观上来看,它们是一起执行的,像这样的多个进程同时执行,我们就称之为“并发”,一般发生在一个处理器中。
- 并行: 在多个处理器中,每个处理器之间执行任务是互不影响的,在微观上来看它们是同时执行的。
线程的状态
线程的状态至少有四种:新建状态,就绪状态,运行状态,(阻塞状态),死亡状态
1.新建状态
当线程被(new)创建的时候,此时的线程的状态为新建状态
线程的创建方式有三种(有的书还有资料说只有两种)
①:继承Thread类
通过继承Thread类,重写run方法(线程的主方法体),调用start()方法来启动线程。
②:实现runnable接口
通过实现runnable接口(任务接口),重写接口中的run()方法(线程任务的方法体),创建线程,然后将实现类的实例作为线程参数,然后调用start()方法启动线程
③:通过使用FutureTask
使用FutureTask来创建线程,然后用Callable来创建任务(即重写callable中的call()方法,返回值为null),然后将FutureTask作为参数创建线程
2.就绪状态
当线程创建后,线程就进入新建状态,如果不调用线程的start()方法,线程就不会进入就绪状态。调用start()方法后线程进入可运行线程池进行等待获取cpu资源
3.运行状态
当线程获取到cpu资源后,线程就开始运行,但是每个线程并不一定是执行完了属于自己的线程体的内容,再去执行下一个线程(当要执行完线程体内容时间过短时)。每个线程被分为为若干个片段,它们获取到的cpu资源不能被其一直占有,它们运行的时候是走走停停,达到所谓的并发执行,且它们的执行次序与其获取cpu资源的概率(能力)有关,获取的概率越大,就执行的次数越多。
4.死亡状态
当线程的方法体执行完毕
5.阻塞状态(并不是每一个线程都会有这种状态)
①.等待阻塞:当前线程所占用的cpu资源被剥夺,等待再次获得cpu。线程休眠
②.同步阻塞:锁对象被其他线程占用,当前线程等待其他线程释放锁对象
③.其他阻塞:sleep(),join().
附录:常用方法
void run() |
如果这个线程使用单独的 Runnable 运行对象构造,则调用该
|
void start() | 导致此线程开始执行; Java虚拟机调用此线程的run 方法。 |
long getId() |
返回此线程的标识符 | String getName() | 返回此线程的名称 |
int getPriority() | 返回此线程的优先级 | Thread.State getState() | 返回此线程的状态 |
void interrupt() | 中断这个线程 | void setDaemon() | 设置为守护线程 |
void join() | 等待这个线程死亡 | void sleep(long miles) |
导致正在执行的线程以指定的毫秒数加上指定的纳秒数来暂停 (临时停止执行),这取决于系统定时器和调度器的精度和准确性 |
原文地址:https://www.cnblogs.com/xiao-bd/p/9689004.html