移动 前端 Python Android Java

多线程知识点

2020-06-16  本文已影响0人  zcwfeng

涉及的知识点,复习用

知识点

类锁
对象锁
syncronized:方法
syncronized(xxxx.class)
显示锁 Lock

wait()
sleep()
notify()
notifyAll()
线程状态:开始,[运行,就绪],[等待,等待超时],阻塞,结束

并行 并发

并发:一个线程完成多个事
并行:多个线程完成多个事

ThreadLocal: 多个线程访问一个资源的问题,每个线程都持有内部的一个副本。操作的是自己的副本。不需要同步。

结构 ThreadLocal 线程----维护内部---->threadLocalMap-----> 内部Entry[] 数组,数组元素组成 ThreadLocal<?> k, Object v>

CAS(Compare And Swap)

sync实现原子操作可以用锁

AutomicXXXX 系列类

悲观锁 (synchronized)总有刁民想害朕,先加锁 ----上下文切换

乐观锁 (CAS)先判断,重试 --------效率高

ABA问题:

线程1:A ---------------A---->B (1 的任务是 A->B)
线程2:A----->C-------A (2 做完自己事还原A 比A快)
解决:带上版本戳

AtomicMarkableReference 标记改过了
AtomicStampedReference 标记改了几次

开销问题

不满足条件不停地重复的尝试,直到成功为止。造成了开销

解决:考虑加锁机制

只能保存一个共享变量的原子操作问题

一个代码块同时改多个变量的值,CAS不适合

解决: 把多个操作 合并到一起 AtomicReference

上一篇 下一篇

猜你喜欢

热点阅读