文章分两份,第一份主要内容为 1-4 点
-
- 多线程的概念
- 2.Java 程序运行原理
-
- 实现多线程的 2 种方式
- 4.2 种方式的区别
-
- 线程同步(同步锁)
-
- 同步线程之间的通讯
1. 多线程的概念
(1)并发和并行
并行:多个 CPU 实例或是多台机器同时执行一段处理逻辑,是真正的同时。
并发:通过 CUP 调度算法,让用户看上去同时去执行,实际上从 CPU 操作层面并不是真正的同时。并发往往需要公共的资源,对公共资源的处理和线程之间的协调是并发的难点。
(2)什么是进程
进程:一个应用程序就是一个进程。
多进程:在操作系统中,能同时运行多个任务程序(并发)。
(3)什么是线程
线程:是操作系统能够进行运算调度的最小单位。
多线程:一个进程中可以并发多个线程,每条线程并行且独立执行不同的任务(提高程序的效率)。
多线程应用场景:服务器同时处理多个用户端请求,教学电脑控屏软件同时共享屏幕给多个电脑。
2.Java 程序运行原理
Java 命令会启动 Java 虚拟机,启动 JVM,等于启动了一个应用程序,也就是启动了一个进程,该进程会自动启动一个 “主线程”,然后主线程去调用某个类的 main 方法。
面试题:JVM 的启动是多线程吗
JVM 启动至少启动了垃圾回收线程和主线程,所以是多线程的。
3. 实现多线程的 2 种方式
- (1). 继承 Thread 类
- (2). 实现 Runnable 接口
**(1). 继承 Thread 类
- 定义类继承 Thread
- 重写 run 方法
- 把新线程要做的事情写在 run 方法里
- 创建线程对象
- 开启新线程
以下是四个 Demo 加强理解**
Demo1
Demo2
Demo3
Demo4
**(2)实现 Runnable 接口
- 定义类实现 Runnable 接口
- 实现 run 方法
- 把新线程要做的事情写在 run 方法里
- 创建自定义的 Runnable 的子类对象
- 创建 Thread 对象,传入 Runnable
- 调用 start()开启新线程**
以下是两个 Demo 加强理解
Demo5
Demo6
- 实现多线程的 2 种方式的区别
继承 Thread:
好处:可以直接使用 Thread 类中的方法,代码简单。
弊端:如果已经有了父类,就不能使用这种方法。
实现 Runnable 接口
好处:即使自己定义的线程类已经有了父类也没有关系,接口是可以多实现的。
弊端:不能直接使用 Thread 中的方法,需要先获取到线程对象后,才能得到 Thread 的方法,代码复杂
5.6 点见 Java 编程基础(二);