Java从零开始 第14讲 多线程

什么是多线程

在学习多线程之前,先让我们明白什么是进程,什么是线程

进程是一个内存中运行的应用程序,每个进程都有一个独立的内存空间
而线程,是指进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少 有一个线程
线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分 成若干个线程

打开你电脑的任务管理,你就能看到你目前执行的线程和进程的数量
在这里插入图片描述

在之前我们所有的编程都是单线程的,即仅有main线程,程序运行的顺序是从头到尾;而当我们学习玩多线程后,我们能够并发的执行多个线程,以达到一些我们需要的功能。

多线程相关概念

调度

目前我们电脑的CPU通常有多核,其中的每一个核,都只能运行单一的线程,为了在不提升运算速率(指处理单个线程的时间)的情况下,提高CPU运算的效率,就必须对合理的调度线程(对于单核而言,并不能提升)

线程的调度,即是对线程运行的调配。在一个进程中,通常所有线程不会一起运行,而是根据需要分次分时的运行,为了能够合理的调度线程,我们有两种基础调度模型:

分时调度:
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间
抢占式调度:
JVM采用的就是抢占式调度,当CPU空闲后,各个线程会开始争抢运行机会,高优先级的线程会更容易抢到运行机会(注意并不是一定抢到)

同步和异步

在我们之前学习常用类库时,我们就提到过同步和异步的概念,现在让我们详细了解一下:

同步(synchronize)-线程排队执行,效率低,但是线程安全
异步(asynchronize)-线程同时执行,效率搞,但是线程不安全

想象一下有一个卖汉堡的汉堡店,同时有几个人一起来买汉堡吃
同步即是几个人排队买汉堡,虽然吃得慢,但是每个人都能安全的吃,如果店家一次能做两个汉堡,则两个人就能一起吃
异步则是围在一起等着吃,当一个人想吃某个汉堡的时候,可能这个汉堡已经被另一个人吃掉了,但是他并不知情,只能打开汉堡盒吃空气,这就是线程不安全(另一个线程篡改了公共的数据,但是执行的线程并不知情)

并发和并行

并发:指两个或多个事件在同一个时间段内发生
并行:指两个或多个事件在同一时刻发生(同时发生,平行发生)

守护线程

之前我们提到过,一个进程通常包括多个线程,至少包括一个线程
当所有的线程全部结束后,一个进程也就自然而然的结束了
线程在其中又可以被分为用户线程和守护线程,守护线程在运行时跟用户线程没有区别,但是如果所有用户线程都结束了,守护线程会自行结束

JVM中一直被我们提到的GC就是一个守护线程,当没有用户线程运行时,GC也会自动结束

多线程编程

学习了那么

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值