加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

java 多线程超详细总结——阿里大牛熬夜整理

发布时间:2021-01-01 21:13:31 所属栏目:运营 来源:网络整理
导读:引 假如对什么是线程、什么是历程仍存有迷惑,请先Google之,由于这两个观念不在本文的范畴之内。 用多线程只有一个目标,那就是更好的操作cpu的资源,由于全部的多线程代码都可以用单线程来实现。嗣魅这个话着实只有一半对,由于回响“多脚色”的措施代码,最

实现:每个Thread都持有一个TreadLocalMap范例的变量(该类是一个轻量级的Map,成果与map一样,区别是桶里放的是entry而不是entry的链表。成果照旧一个map。)以自己为key,以方针为value。 首要要领是get()和set(T a),set之后在map里维护一个threadLocal -> a,get时将a返回。ThreadLocal是一个非凡的容器。

2.原子类(AtomicInteger、AtomicBoolean……)

假如行使atomic wrapper class如atomicInteger,可能行使本身担保原子的操纵,则等同于synchronized


该要领可用于实现乐观锁,思量文中最初提到的如了局景:a给b付款10元,a扣了10元,b要加10元。此时c给b2元,可是b的加十元代码约为:

java 多线程超具体总结——阿里大牛熬夜清算

AtomicReference 对付AtomicReference 来讲,大概工具会呈现,属性丢失的环境,即oldObject == current,可是oldObject.getPropertyA != current.getPropertyA。 这时辰,AtomicStampedReference就派上用场了。这也是一个很常用的思绪,即加上版本号

3.Lock类

lock: 在java.util.concurrent包内。共有三个实现:

  • ReentrantLock
  • ReentrantReadWriteLock.ReadLock
  • ReentrantReadWriteLock.WriteLock

首要目标是和synchronized一样, 两者都是为了办理同步题目,处理赏罚资源争端而发生的技能。成果相同但有一些区别。

区别如下:

  1. lock更机动,可以自由界说多把锁的枷锁解锁次序(synchronized要凭证先加的后解次序)
  2. 提供多种加锁方案,lock 阻塞式,trylock 无阻塞式,lockInterruptily 可打断式, 尚有trylock的带超时时刻版本。
  3. 本质上和监督器锁(即synchronized是一样的)
  4. 手段越大,责任越大,必需节制好加锁息争锁,不然会导致劫难。
  5. 和Condition类的团结。
  6. 机能更高,对好比下图:
ReentrantLock     可重入的意义在于持有锁的线程可以继承持有,而且要开释对等的次数后才真正开释该锁。 行使要领是:

1.先new一个实例


2.加锁


此处也是个差异,后者可被打断。当a线程lock后,b线程阻塞,此时假如是lockInterruptibly,那么在挪用b.interrupt()之后,b线程退出阻塞,并放弃对资源的争抢,进入catch块。(假如行使后者,必需throw interruptable exception 或catch)

3.开释锁

java 多线程超具体总结——阿里大牛熬夜清算

必需做!作甚必需做呢,要放在finally内里。以防备非常跳出了正常流程,导致劫难。这里增补一个小常识点,finally是可以信赖的:颠末测试,哪怕是产生了OutofMemoryError,finally块中的语句执行也可以或许获得担保。

ReentrantReadWriteLock

可重入读写锁(读写锁的一个实现)

java 多线程超具体总结——阿里大牛熬夜清算

两者都有lock,unlock要领。写写,写读互斥;读读不互斥。可以实现并发读的高效线程安详代码

4.容器类

这里就接头较量常用的两个:

  • BlockingQueue
  • ConcurrentHashMap

BlockingQueue 阻塞行列。该类是java.util.concurrent包下的重要类,通过对Queue的进修可以得知,这个queue是单向行列,可以在行列头添加元素和在队尾删除或取出元素。相同于一个管  道,出格合用于先辈先出计策的一些应用场景。平凡的queue接口首要实现有PriorityQueue(优先行列),有乐趣可以研究

BlockingQueue在行列的基本上添加了多线程协作的成果:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读