Day 22
学习目标:
1.线程的概念
2.Thread类和Runnable接口
3. 主线程与线程的生命周期
4.线程状态控制方法(sleep休眠状态)
5.线程安全threadsafe
学习内容:
1.线程的概念
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
线程是独立调度和分派的基本单位。
并行: 多个CPU同时执行多个任务
并发: 一个CPU同时执行多个任务
2.Thread类和Runnable接口
Thread类用于操作线程,是所以涉及到线程操作(如并发)的基础。Java开发中,我们实现多线程,有两种方式, 一种是继承Thread类,一种是实现Runnable接口。
实现步骤:
- 1.创建一个Thread类的子类
- 2.在Thread子类中重写run方法, 设置线程任务(干什么)
- 3.创建Thread子类的对象
- 4.调用Thread类中的方法来start来启动线程,执行run方法
例如:
结果:
例二:
结果:
Runnable接口:
让一个类实现Runnable接口即可,并且也需要覆写run方法。
一种是继承 Thread 对象,重写 run() 方法。
另一种是实现 Runnable 接口,重写 run() 方法,并将该实现类作为创建 Thread 对象的参数。
例如:
结果:
3. 主线程与线程的生命周期
通用的线程周期可以有下面的图表示
实现步骤:
- 1.创建一个Thread类的子类
- 2.在Thread子类中重写run方法, 设置线程任务(干什么)
- 3.创建Thread子类的对象
- 4.调用Thread类中的方法来start来启动线程,执行run方法
例如:
结果:
例二:
结果:
4.线程状态控制方法(sleep休眠状态)
如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态方法sleep()方法来实现。
在当前线程调用sleep()方法进入阻塞状态后,在其睡眠时间段内,该线程不会获得执行机会,即使系统中没有其它可执行的线程,处于sleep()中的线程也不会执行。所以sleep()方法常用于暂停程序的执行。
例如:
結果:
5.线程安全threadsafe
thread-safety(线程安全)是指代码被多个线程同时执行的时候仍然正常工作。尤其是要满足当多个线程都需要访问同一共享数据空间的时候,只有一个线程能被满足。
解决线程安全的一种方案:使用同步代码块
- 格式:
- synchronized(锁对象){
- 可能会出现线程安全的代码(是因为访问量共享的数据)}
- 注意:
- 1.通过代码块中的锁对象,可以私用任意对象
- 2.但是必须保证多个线程使用的锁对象是同一个
- 3.锁 对象的作用:
- 把同步代码块锁住,只让一个线程执行
例如:
结果 :
2020080605009