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