2021-05-29

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

猜你喜欢

转载自blog.csdn.net/m0_54241777/article/details/117393008