24_JavaSE_多线程
Posted Jack·Kwok
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了24_JavaSE_多线程相关的知识,希望对你有一定的参考价值。
1. 多线程简介
首先,什么是多线程呢?我先举个现实生活中的例子给大家理解一下。假如现在有一个工厂,一开始的时候我只雇佣了一个员工,那么这个工厂的工作只能由这个单一的员工来操作,那么这个员工就只能是一件一件事情依次的做,而不能同时做两件事情(毕竟人也做不到一心二意嘛);而如果我要实现该工厂同一时间有多件事情正在被做,那么我就需要多雇佣一些员工。因此,程序也是如此,单一流程,我们称为单线程;多个流程同时进行,我们称为多线程。那么按照这个标准,我们前面的章节讲到的内容就都属于单线程的范围了。
线程和进程的区别?事实上,一个进程包含一个或多个线程,而且线程是不能独立存在的,只能是进程的一部分。
CPU 如何实现多线程?我们知道,一个 CPU 在同一时刻只能处理一个线程,这并满足不了多线程的需求。因此,CPU 将执行时间分成一个个小时间片段,从而不断地在交替处理着不同的线程,从而让我们从宏观上看,认为线程之间是并发的一样。
2. 线程的生命周期
一个线程的生命周期:
将上面的流程图用文字描述如下:
1、新建:通过 new 关键字和 Thread 类创建对象后到调用 start() 方法前的这段状态称为新建状态。
2、就绪:调用 start() 方法到线程获取到 CPU 资源的这段时间,称为就绪状态。(有时候是因为 CPU 被其它线程占有了的情况)
3、运行:线程占有了 CPU 资源,就开始执行 run() 方法,直到程序变为阻塞状态或死亡状态的这段时间称为运行状态。
4、阻塞:在线程运行过程中,可能会触发一些机制,从而进入阻塞状态,主要情况为下:
①等待阻塞:运行状态时线程执行了 wait 方法
②同步阻塞:运行状态时线程获取 synchronized 同步锁失败(因为同步锁被其他线程占用)
③其它阻塞:运行状态时线程执行了 sleep 或 jion 等方法。
阻塞状态下的线程等待若干时间后(比如:sleep 方法超时等等)会进入就绪状态。
5、死亡:当线程完成任务或触发其它终止条件时则进入死亡状态。
3. 创建线程的方法
3.1. 实现 Runnable 接口
创建一个类,实现 Runnable 接口,重写该接口的 run 方法,创建实例后调用 start 方法。
3.2. 继承 Thread 类
创建一个类,继承 Thread 类,重写 run 方法,再通过创建实例,调用 start 方法。
以上是关于24_JavaSE_多线程的主要内容,如果未能解决你的问题,请参考以下文章