第8章 多线程
8.1 线程简介
1 、多任务
-
现实生活中多件事一起作。
-
在程序中是指在一个系统中可以同时进行多个进程,即有多个单独运行的任务,每一个任务对应一个进程。
-
每一个进程都有一段专用的内存区域,即使是多次启动同一段程序产生不同的进程也是如此。
2、多线程
-
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
-
多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。
-
多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
-
主线程和子线程交替执行
3、程序、进程、线程
-
程序
-
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
-
-
进程
-
一个应用程序(1个进程是一个软件)
-
是执行程序的一次执行过程,是一个流动的概念。是系统资源分配的单位。
-
一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
-
-
线程
-
一个进程中的执行场景/执行单元。
-
线程是CPU调度和执行的单位。
-
一个线程不能独立的存在,它必须是进程的一部分。
-
-
注意:
-
一个进程可以有多个线程
-
线程是独立的执行路径。
-
在程序与运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程
-
main()称为主线程,为系统的入口,用于执行整个程序;
-
在一个进程中,如果开辟了多个进程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能认为的干预的。
-
对于同一份资源操作,会存在资源抢夺的问题,需要加入并发控制。
-
线程会带来额外的开销,CPU的调度时间、并发控制开销。
-
每一个线程在自己的工作内存交互,内存控制不当会造成数据不一致。
-
8.2 线程创建
-
三种创建方式:
-
Thread class 继承Thread类
-
Runnable接口 实现Runnable接口
-
Callable接口 实现Callable接口
-
8.2.1 Thread类
-
创建一个新的执行线程的方法,将一个声明为Thread的子类。
-
自定义线程类继承Thread类
-
重写run()方法,编写线程执行体
-
创建线程对象,调用start()方法启动线程。
-
注意:
-
线程开启不一定立即执行,由CPU调度执行
-
启动线程:子类对象.start()
-
不建议使用,为了避免OOP单继承的局限性
-
-
实例
package Demo032;
/**
* @Author: H-YONG-8
* @DATA: 2023/4/20
* JavaSE
* 创建多线程 继承Thread类
*/
public class TestThread1 extends Thread{