1.1进程和多线程概述

什么是进程?

讲到多线程技术时,不得不提及“进程”这个概念。我们先来看一下1-1图片所示的内容。
1-1图1-1 MAC OS操作系统活动监视器

难道正在操作系统中运行的程序可以理解成一个成一个 “进程” ?
没错!
通过查看'活动监视器'窗口中的列表,完全可以将运行在内存中的文件理解成进程。进程就是受操作系统管理的基本运行单元。
程序是指定序列,这些指令可以让CPU完成指定的任务,也可以理解为这些指令调用了操作系统内核中CPU调度管理器。*.java文件在编译后生成了 *.class文件,在操作系统中,启动了一个JVM虚拟机相当于创建了一个进程,在虚拟机中加载class文件并运行,在class文件中通过执行创建新线程的代码来执行具体的任务。创建线程测试用的代码如下:

/**
 * @author gongguowei01@gmail.com
 * @since 2020-01-15
 */
public class Test1 {
    public static void main(String[] args) {
        try {
            Thread.sleep(Integer.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在没有运行Test1这个类之前,活动监视器‘j’开头的进程列表如图1-2所示。
在这里插入图片描述图1-2 活动监视器‘j’开头的进程

Tset1类运行1次后进程列表如图1-3所示,可以看到在活动监视器中创建了1个java的进程。如果我们运行3次Test1类,那么可以看到在活动监视器中创建了3个java的进程,说明每执行一次 main() 方法就创建一个进程,其本质就是JVM虚拟机进程。

图1-3图1-2 创建了一个java的进程

什么是线程呢?

线程可以理解为在进程中独立运行的子任务,例如QQ.exe在运行时,很多子任务也在同时运行,例如好友视频线程、下载文件线程等,这些功能都可以同时运行,其中的每一项任务都可以理解为“线程”,它们都有对应的线程在后台运行。
进程负责向操作系统申请资源。在一个进程中,多个线程可以共享进程中相同的内存或文件资源。
使用多线程的优点有什么呢?例如Mac OS操作系统,它就是一个“多任务操作系统”,我可以一边听着歌,一边在网页中编辑博客。多线程可以大幅利用CPU的空闲时间来处理其他任务,CPU在这些任务中不停地进行切换,由于切换的速度非常快,所以让使用者感觉这些任务在同时运行,所以可以得出结论,多线程技术可以在同一时间内执行更多不同的任务。

在什么场景下使用多线程技术?

  1. 阻塞。一旦系统中出现了阻塞现象,则可以根据实际情况来使用多线程提高运行速率。
  2. 依赖。业务分为两个执行过程,分别是A和B。当A业务发生阻塞情况时,B业务执行不依赖A业务的执行结果,这时可以使用多线程技术来提高运行效率;如果B业务依赖A业务的执行结果,则不可以使用多线程技术,按顺序进行业务的执行。

在实际开发场景中,我们不要为了使用多线程而使用多线程,要根据实际场景决定。
注意:多线程是异步的,并且运行的时机是不可预测的,所以千万不要把代码中的顺序当做线程执行的顺序。

原文地址:https://www.cnblogs.com/gongguowei01/p/12199220.html