涉及的知识点,复习用
知识点
锁
类锁
对象锁
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
网友评论