学习笔记总结之JAVA JUC(一)

目录

JUC

如何自己实现一把锁

AQS(Abstract Queued Synchronizer 抽象同步队列)原理


JUC

1、什么是JUC?

包名的缩写JUC

2、为什么出现JUC

为java语言提供多线程同步结构的支撑

3、解决了什么问题

解决多线程同步问题,给java开发者提供了便利的函数、功能和结构

4、包含哪些内容

原子类、锁类和工具类(线程同步结构、线程池等等)

如何自己实现一把锁

1、如何表示锁状态:有锁?无锁?

boolean state;    //true 有锁,false无锁。只能表示两种状态

为了实现锁重入,要记录锁重入的次数:int times;

=>两个变量有点冗余,直接用int state表示锁状态和重入次数

0无锁,大于零表示锁重入次数  提示:1为重入一次,也即只加锁一次

2、如何保证多线程抢锁线程安全?

CAS

3、如何处理获取不到锁的线程

自旋     阻塞      自旋+阻塞

4、如何释放锁

自旋:自己抢锁

阻塞:唤醒

自旋锁:线程不停的执行某段代码,直到条件满足或次数达到限制

        缺点:占用CPU不干事,导致性能障碍,占着茅坑不拉屎

        优点:适用于执行操作较少切快的操作,自旋马上就能获得锁,这样的话就不会太消耗CPU资源

阻塞:达不到条件,告诉操作系统,把我阻塞

AQS(Abstract Queued Synchronizer 抽象同步队列)原理

Abstract:因为它不知道怎么上锁。模板方法模式即可暴露出上锁逻辑

Queue:线程阻塞队列

Synchronizer:同步

CAS+state:完成多线程抢锁逻辑

Queue 完成抢不到锁的排队

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值