并发基础知识补全和CAS基本原理学习总结

1、新启线程的到底有几种方式?

    两种 extends Thread  实现Runnable

    Callable 严格说也是实现Runnable 通过FutureTask交给Thread

2、线程的生命周期。/状态

      创建状态(初始化) 就绪/运行中  等待/等待超时 

      synchronized 阻塞态  终止/结束态  

    阻塞是被迫进入的状态  等待是主动进入的状态

3、死锁和更多的并发安全。

    两个或两个以上的进程执行过程中,竞争资源或者彼此通讯造成阻塞,都无法继续下去

    多个操作者争夺多个资源,资源少于操作者

    争夺资源的顺序不对

    拿到资源不释放

 

    改变资源顺序   尝试拿锁  tryL ock

4、ThreadLocal深入理解。 

threadLocal里面持有一个threadLocal.threadLocalMap,里面持有Entry继承一个弱引用  Entry(threadLocal,object)

5、什么是CAS?Compare and Swap 比较和交换

    现代处理器都支持CAS指令,循环这个指令,直到完成为止

原子操作?要么全部完成,要么全部没完成,不可再分

比如:用锁,比较重量级,所以出现了CAS指令,效率高,不存在上下文切换消耗的时间

CAS 无锁化  高度竞争 特意设计

存在的问题: 

    1.ABA问题

线程1:A if  A 替换为B

线程2:A if  A 替换为C 又替换为A,执行快,线程1没发现变化

    2.开销问题  一直比较一直比较增加CPU开销

    3.只能对一个共享变量操作

   Atomic开头的,都是JDK提供的原子变量操作 

 

解决ABA问题,提供版本戳

AtomicMarkableReference 关心有没有动过

  • AtomicStampedReference 关心动过以及几次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值