java多线程一些相关概念

同步和异步:同步方法调用开始后,需等到本次调用有结果才继续往后执行;异步调用发生后,调用者无需等待返回,继续后续执行。举个例子你出去打篮球先到楼下小卖部买瓶水,老板店里现在没货,要去别的地方取,这个时候你要是等老板取到水给你你再去打篮球那这就是同步调用,而要是你跟老板约定水到了以后给你送到篮球场,你自己先去打球,那这个过程就是异步调用。

并发和并行:并发偏重于多个任务交替执行,由系统分配时间片,由于切换频繁看起来像是同时执行,而实际上同一时刻只有一个任务在执行。并行则是真正意义上的同时执行。

临界区:或者说是共享资源,但是同一时刻只能被一个线程占用,最经典的例子就是打印机了(一个公司只有一台的那种)。

阻塞和非阻塞:通俗点说就是两个线程是否互相影响,占用相同的资源。还是上边的打印机,同事A在打印文件,这是同事B要是也要打印东西的话就只能等待,对于线程而言,等待会导致挂起,这种情况就是阻塞了(这个时候要是领导也要打印文件的话,可能会导致A、B都等待了,因为领导优先级比较高);非阻塞强调的是线程间互相没有影响。

死锁、饥饿、活锁:死锁是比较糟糕的情况,以AB两人吃饭为例,两人相对而坐,桌上只有两根筷子,两人按照习惯都先伸出右手去拿右边的筷子,然后再去拿左边的筷子,如果两人都不放弃自己手上的筷子那么这个状态就将一直持续,也就是发生了死锁;饥饿就是同事A想用打印机的时候发现前边领导再用,于是A站在后边等待,但是比较悲剧的是后续又有几个领导过来要打印文件,于是同事A就一直等,这种情况就称为饥饿,由于领导优先级比较高或者脸皮比较厚一直占着资源不放,就会导致同事A一直无法正常工作。饥饿在一段时间以后是有可能解决的。活锁就是肥皂剧里一个比较常见的镜头——男女主角小路上相对偶遇,互相谦让,让对方先过,结果是一而再、再而三的撞在一起,这种情况发生在两个线程间就是不断地主动释放资源给其他线程使用,导致没有线程可以同时拿到所有资源正常执行。

无锁CAS(Compare and Swarp):所有线程都可以访问临界区,保证必然有一个线程能在有限的次数内完成操作,离开临界区。juc的包中有很多涉及CAS的类,原理大致是在操作数据时传入原值及预期值,若是处理结果与预期值不符则重试,以此保证在当前线程的操作没有受到其他线程影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值