多线程概述

Java多线程初识
线程通信、线程组
线程池和线程相关类
CAS算法的理解和应用

想要了解线程,就得先了解进程,因为线程依赖于进程。
进程和线程

所有运行中的任务通常对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行状态的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。

进程的三个特征:

  • 独立性:进程是系统中独立存在的实体,它可以拥有自己的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。
  • 动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而程序是一个正在系统中活动的指令集合。在进程中加入了时间概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中是不具备的。
  • 并发性:多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。

并发性和并行性概念辨析

  • 并发性:指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。
  • 并行性:指在同一时刻,有多条指令在多个处理器上同时执行。

多进程
大部分操作系统都支持多进程并发执行,比如就像java程序员一边用着编译器敲代码、一边在播放器放着音乐、一边在查看电子文档这看起来就像是同时执行的。
但事实上对于一个CPU而言,它在某个时间点只能执行一个程序,也就是只能运行一个进程。CPU不断在这些进程之间来换切换执行,只不过切换的速度非常快,用户感觉不到,给人感觉是在同时执行。

多进程的意义
可以使计算机同时做多个事情,提高了CPU的使用率。
什么是多线程?

线程(Thread)也被称为轻量级进程,线程是进程的执行单元,是程序使用CPU的基本单元。就像进程在操作系统中的地位一样,线程在程序中是独立的、并发的执行流。当进程被初始化之后,主线程就被创建了,对于大多数应用来说,通常只需要一个主线程,也可以创建多条执行流,这些执行流就是线程。
线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享所拥有的全部资源。

线程是独立运行的,它并不知道进程中是否还有其他线程存在。线程的执行是抢占式的,也就是说线程的执行是随机的,正在执行的线程随时有可能被挂起,而正在就绪的线程也随时被执行。

从逻辑角度来看,多线程存在于一个应用程序中,让一个应用程序中可以有多个执行部分同时执行,但操作系统无须将多个线程看作多个独立的应用,对多线程实现调度和管理以及资源分配;可以说操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。

多线程的优势

扫描二维码关注公众号,回复: 4574861 查看本文章
  • 进程之间不能共享内存,但线程之间共享内存非常容易。
  • 系统创建进程时需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程实现多任务并发比多进程效率高;
  • Java语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了Java的多线程编程。

多线程的意义
多线程的存在,不是提高程序的执行速度。其实是为了提高应用程序的使用率。多个线程是在抢CPU的执行权限,哪个进程的执行路径多也就是包含的线程数量多抢到CPU执行权限的概率就越大。

多线程原理图

在这里插入图片描述
图中白色的条状代表CPU执行的时间片。CPU的执行时间片在多个线程之间来回随机切换。

猜你喜欢

转载自blog.csdn.net/mashaokang1314/article/details/84258418