zoukankan      html  css  js  c++  java
  • 210 01 Android 零基础入门 03 Java常用工具类 05 Java多线程 01 Java多线程概述 01 什么是线程 & 什么是进程?

    210 01 Android 零基础入门 03 Java常用工具类 05 Java多线程 01 Java多线程概述 01 什么是线程 & 什么是进程?

    本文知识点:什么是线程

    说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进行了截图记录,没有对截图步骤进行详细的文字说明(后面博主时间充裕了,会对目前的博客编辑修改,补充上详细的文字说明);有些步骤和相关知识点缺乏文字描述,可能会难以理解。读者如有不明之处,欢迎博客私信或者微信(本人微信在博客下方的“关于博主”处)与本人交流,共同进步

    什么是线程?

    什么是线程?
    我们首先要明白什么是进程

    什么是进程?

    进程是指可执行程序并存放在计算机存储器的一个指令序列,它是一个动态执行的过程。
    mark

    看到上面这个概念我们可能就懵了。我们一起来想象一下生活中的场景:
    我们可能会一边听歌一边在编辑器中敲代码,甚至可能还会偶尔去QQ上回复一下消息。
    mark

    这个场景中我们涉及到3个软件的使用:
    音乐播放器、代码编辑器、QQ
    mark

    因为这三个软件“同时”一起运行的,所以我们才能很多事情一起完成。
    这三个软件可以同时运行,就是我们的进程在起作用。

    我们可以打开windows的任务管理器,在任务管理器中可以看到进程这么一个选项卡。
    mark
    把它打开以后,我们就可以看到当前操作系统中所有所运行的所有进程了。
    mark

    比如我们看到了记事本软件程序和QQ软件程序对应的进程:
    mark

    有些软件程序只对应一个进程,比如刚才看到的记事本。有的软件会对应多个进程,比如一些杀毒软件和数据库软件:也就是说一些比较大的软件是由多个进程构成的。
    mark

    其实早期的操作系统都是单任务的操作系统,也就是在单任务操作系统中,一次只能运行一个应用程序,比如QQ或者播放器,同时只能运行一个程序。一个程序运行结束后,才能执行下一个程序:
    mark
    比如,你先听歌曲,歌听完了,才能去QQ中回复好友的信息:
    mark
    mark
    mark

    而我们现在的操作系统,都是多任务操作系统,即:“同时”可以运行多个应用程序。这就是 进程 在起作用。
    mark

    言归正传,那到底什么是线程呢?

    线程的定义和解释

    线程是比进程还要小的运行单位,一个进程可以包含多个线程。

    比如一个程序是由多行代码组成的,那么这些代码就可以分为很多块。每个块放到不同的线程中,不同的线程分别执行。

    所以我们认为线程相当于一个子程序
    mark
    mark

    我们明白了进程和线程的概念之后,又有了新的问题:
    我们知道程序是由CPU运行的,那我们只有一个CPU的情况下,如何保证这么多程序同时运行呢?

    这里我们可以想象成,把CPU的执行时间分成很多的小块,每一小块的时间长度都是固定的,这每一个小块我们称之为一个时间片,每个时间片的时间可以定义的非常短,比如说定义为1毫秒(1ms)
    mark
    音乐播放器、代码编辑器、QQ三个软件同时运行,那么,它们三个如何获取CPU的执行时间呢?
    mark
    这个其实是随机的,我们可以这么考虑:
    我们的音乐播放器运行1ms,即一个时间片之后,它会把CPU的使用权转给代码编辑器,代码编辑器运行1ms之后,又将CPU的使用权转给QQ。
    mark
    mark
    mark
    这三个程序就轮流地在很短的时间内,去使用CPU。对于CPU来讲呢,这些软件其实还是轮流运行的。但是由于时间片非常短,即每个软件交叉运行的时间非常短,所以对于我们使用者而言,是毫无感知的。所以,我们就会认为这些软件都是“同时运行”的
    mark

    以上,就是为什么在只有一个CPU的情况下,这些软件能够同时运行的原因。上面的原理叫做:时间片的轮转,是通过对CPU的时间的轮转来达到“多个软件在一个CPU上同时运行”这样一个效果的。

    后续线程系列要学习的内容

    mark

  • 相关阅读:
    Java堆栈详解
    JVM 图形化监控工具
    Tomcat 7优化前及优化后的性能对比
    Java 枚举常见7种用法
    GitHub上如何删除repository仓库
    eclipse下使用git上传(下载)代码至(从)github
    标准的软件工程过程之文档标准
    maven添加本地非repository中的jar包
    Junit初级篇
    mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。
  • 原文地址:https://www.cnblogs.com/xlfcjx/p/13932443.html
Copyright © 2011-2022 走看看