• 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业务的执行结果,则不可以使用多线程技术,按顺序进行业务的执行。

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

  • 相关阅读:
    小橙书阅读指南(三)——插入排序
    小橙书阅读指南(二)——选择排序
    小橙书阅读指南(一)——二分查找法
    30分钟带你了解Docker
    消息队列之Kafka——从架构技术重新理解Kafka
    【Mongodb】开启慢查询
    【Azure SQL】数据库性能分析
    【MacBook】常用命令 && 软件安装
    【基准测试】BenchmarkDotNet介绍
    【设计模式】抽象工厂模式
  • 原文地址:https://www.cnblogs.com/gongguowei01/p/12199220.html
Copyright © 2020-2023  润新知