JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

一、进程与线程的概念

以下多线程总结内容均为高洪岩  老师创作的Java多线程编程核心技术》书籍所得。以做笔记记录。希望对同样在学习多线程的同学有所帮助。也感谢 高洪岩  老师。

在说线程的技术的时候,我们得知道一个概念,就是什么是“进程”,看下图

JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

我们可以理解为,在windows系统中,运行在内存中的exe文件理解为进程。进程是受操作系统管理的基本运行单位。

那什么是线程呢?

线程可以理解成在进程中独立运行的子任务。比如在运行QQ时,我们可以同时聊天、视频、发文件、听音乐等。QQ.exe是一个进程,聊天、视频、发文件、听音乐每一个都是一个运行在QQ进程里的任务线程。

二、如何使用多线程

实现多线程编程的方法有四种,先说java 1.5之前的两种

1:继续Thread类

我们先来看一个代码运行接口,如下图

JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

(1)可知main方法也是一个线程

(2)代码的运行结果与执行顺序或调用顺序是无关的(这个后面再会举例是为什么)

对于上面第二点我们再看一个图。

JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

如果我们把 start()改为 run()的话,就会发现调用的顺序是一致的,这是为什么呢?

因为 线程 分为 5 种状态:创建、就绪、运行、阻塞、死亡

而start()代表线程就绪,等待的是系统进程自动来调用。

而run()则是可以我们手动控制什么时候运行的。

也就是说,main方法是系统自动调用的,先执行了main入口,然后执行mythread的run方法,最后的print()必须等待mythread的run方法执行完之后才会调用。

2:实现Runnable接口

可能有人问,为什么已经有继承的Thread类了,还有一个Runnable接口呢,其实Thread也是实现的Runnable接口。

JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

因为java只能支持单继承,所以使用实现Runnable接口的方式可以更加的灵活。

JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

如何运行上图的代码呢?

JAVA多线程总结(一:进程与线程的概念以及如何使用多线程)

运行的结果跟继承Thread类的结果一致。