Java多线程(一)

Java多线程(一)

盖一间房子,只雇佣一个工匠是远远不够的,往往需要一个团队一起开工,它们分工明确,各忙各的,还要考虑到各自之间的配合,不容差错,否则,房子是盖不起来的!

多线程可以这么理解:你的计算机资源就好比这么一间正在施工的房子,而你需要许多人一起开工各自负责各自的领域,比如掂灰,活灰,凳达,起达,下线,挂线等等,而这些活有时需要多个人一起进行,比如说抹灰,有给墙面的,有给顶棚的,有给地面的,它们又是这些小项目中分工不同的。
在Java中,你可以将这些不同的领域(抹灰,活灰,凳达等)理解为进程,而进程中分工不同(抹墙面,抹地面等)的就是线程。它们都在为完成计算机资源的使用而努力。

在学习多线程之前,先了解一些基本信息:
关键字

  • 线程与进程
  • 线程调度
  • 同步与异步
  • 并发与并行

1.进程与线程

进程:是指一个内存中运行的应用程序,每一个进程都有一个独立的内存空间
线程:是进程中的一个执行路径共享一个内存空间。一个进程启动之后,里面的若干执行路径又可以划分为若干个线程;线程之间可以自由切换,并发执行,一个进程最少有一个线程

2.线程调度

调度:是指计算机任务与资源之间的分配过程。人只有一个大脑,在同一时间,只能想一件事,计算机同样如此,每台计算机只有一个CPU,CPU在任意时刻内,只能执行一条机器指令,但是它有多个核心,常见的比如4核8核等等,每个核心每次可以处理一个线程,但是,有的进程它含有上千甚至上万的线程任务,这就需要让它们合理使用计算机资源,因此需要有一套线程调度制度来使计算机的资源得到充分利用!

线程调度有:分时调度和抢占式调度

(1)分时调度:

分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间。
这样做的缺点也是可想而知,凡事都有轻重缓急,有些任务我们需要立即执行,而有些任务可以缓缓,当优先级不同且数量庞大时,分时调度明显不能满足这一需求。

(2)抢占式调度

抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个线程执行(线程随机性)。

Java使用的是抢占式调度,多线程的这种调度机制,会让用户感觉到程序的运行速度大大提升,但事实上,多线程调度机制并不能提高程序的运行速度,它提高的是程序的运行速率以及计算机资源的使用率

3.同步与异步

同步:排队执行,效率低但是安全

举个简单的例子:电影院的售票处,顾客们排着队买票,一手交票一手交钱,没有财务纠纷等等,一次只服务一人。

异步:同时执行,效率高但是数据不安全

同样是在电影院售票处,顾客们一拥而上,服务员手忙脚乱,万一没给哪个顾客票,或者说没收钱,就出了大问题!

4.并发与并行

并发:指两个或多个事件在同一时间段内发生。

举个简单的例子:一般学生都是下午6点放学,基本上在6:30-8:00之间会吃晚饭,但这些家庭不可能是商量好了哪个点一起吃饭,只能说在这个时间段内大部分家庭都会吃晚饭。这就可以看做是并发。

并行:指两个或多个事件在同一时刻内同时发生。

接上面例子:小明家,妈妈说吃饭了,全家就坐齐一起开饭,这个就是并行。


欢迎指出问题,提出您的宝贵意见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值