多线程概述

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

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

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

进程的三个特征:

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

进程和线程的区别

  • 进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互不干扰;而线程共享所属进程占有的内存地址空间和资源,数据共享简单,但是同步复杂。
  • 进程之间不会相互影响,可靠性高;一个线程崩溃可能影响整个程序稳定性,可靠性低;
  • 进程的创建和销毁不仅需要保存寄存器和栈信息,还需要资源的分配回收以及页调度,开销较大;线程只需要保存寄存器和栈信息,开销较小。

进程时操作系统进行资源分配的基本单位,线程时操作系统进行调度的基本单位

并发性和并行性概念辨析

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

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

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

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

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

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

多线程的优势

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

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

多线程原理图

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

上下文切换

上下文切换是指CPU从一个线程切换到另一个线程,上下文是指某一时间点CPU寄存器和程序计数器的内容。CPU通过为每个线程分配CPU时间片来实现多线程机制,CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态,上下文切换通常是计算密集型的,意味着此操作会消耗大量CPU时间,故线程也不是越多越好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值