线程和锁

多线程七大状态
    1.新建
    2.可运行/就绪
    3.运行
    4.死亡
    5.阻塞状态(Synchronized)
    6.等待(wait)
    7.超时等待(sleep)

cas的三大问题:
    1.ABA问题
    2.自旋消耗资源
    3.只能保证一个共享变量的原子操作

锁的种类
    1.乐观锁-cas
    2.悲观锁-synchronized、ReentrantLock
    3.自旋锁
    4.递归锁(可重入锁):任何线程获取了锁之后可以再次获取该锁而不会被阻塞,识别获取锁的线程是否为当前占据锁的线程,如果是则再次成功获取。获取锁后进行自增,
    5.读写锁:ReentrantReadWriteLock
    6.公平锁
    7.非公平锁:在java里面,synchronized默认就是非公平锁,ReentrantLock可以通过构造函数来设置该锁是公平的还是非公平的,默认是非公平的。
    8.共享锁:多个线程可以获取读锁,以共享的形式持有,本质上与乐观锁,读写锁一样,JAVA的共享锁也是ReentrantReadWriteLock
    9.独占锁:只有一个线程可以获取锁,与悲观锁,互斥锁一样,JAVA的独占锁有:synchronized,ReentrantLock
    10.重量级锁:synchronized
    11.轻量级锁
    12.偏向锁
    13.分段锁:ConcurrentHashMap
    14.互斥锁(同步锁):互斥锁用最简单的一句话来理解:某个资源只能被一个线程访问,读读,读写,写读,写写都是一样的。
    15.死锁
总结
    JAVA里面主要有ReentrantLock ,synchronized,Lock三种,类别也是不一样
    synchronized:属于独占锁、悲观锁、可重入锁、非公平锁
    ReentrantLock:继承了Lock类,可重入锁、悲观锁、独占锁、互斥锁、同步锁。
    Lock:Java中的接口,可重入锁、悲观锁、独占锁、互斥锁、同步锁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值