锁java

在这里插入图片描述
synchronized 底层实现原理
线程在获取锁的时候,其指针指向的是一个monitor对象(由C++实现)的起始地址。每个对象实例都会有一个 monitor。其中monitor可以与对象一起创建、销毁;亦或者当线程试图获取对象锁时自动生成。而monitor是添加Synchronized关键字之后独有的。synchronized同步块使用了monitorenter和monitorexit指令实现同步,这两个指令,本质上都是对一个对象的监视器(monitor)进行获取,这个过程是排他的,也就是说同一时刻只能有一个线程获取到由synchronized所保护对象的监视器。 线程执行到monitorenter指令时,会尝试获取对象所对应的monitor所有权,也就是尝试获取对象的锁,而执行monitorexit,就是释放monitor的所有权。

在这里插入图片描述
Lock完全用Java写成,synchronized 是JVM实现的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一定要这么写,不然有问题

trylock:在这里插入图片描述

在这里插入图片描述

第二个线程如果超过5秒,就获取失败

在这里插入图片描述
如果第二个线程没有获取锁,unlock的时候,会报错,所以要加个if
如果第二个线程5秒内没有获取锁,中断
trylock与lock区别,trylock如果获取不到,就不获取了,lock则不是

sysnchroized与reentrantlock区别
syschronized jvm级别,重入
reentrantlock 手动,重入,lock指令, condition

与读写锁reentrantreadwritelock区别 细粒度问题

生产者消费者 在这里插入图片描述
condition:线程池队列用的就是condition

最底层的核心类

reentrantlock 锁的底层实现就是这个类abstractQueuedSynchronizer
在这里插入图片描述

在这里插入图片描述
队列+双向链表.

abstractQueuedSynchronizer 简称aqs同步器
非公平锁

在这里插入图片描述
在这里插入图片描述
countdownlatch
CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。
CountDownLatch 在 JDK 1.5 被引入。
存在于 java.util.concurrent 包下。
例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
场景,等远程接口执行完了,再执行我的业务,就是依赖调用

在这里插入图片描述
用来做限流,并发限流
分布式限流 redis+lua 在这里插入图片描述
第二章
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以做订单号生成
原子性的底层是cas
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
嗅探机制,可以理解为类似于监听器,
在这里插入图片描述
hashp map

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
链表大于8的时候,才会变红黑树
hashtable与currenthashmap
都是线程安全
但是,底层不一样,
hashtable put的时候是synchrnized 在这里插入图片描述
currenthashmap 1.7分段锁
linkarraylist 双向链表

在这里插入图片描述
在这里插入图片描述
add方法 带锁,线程安全
在这里插入图片描述get没有锁,get老值,所以不用,
在这里插入图片描述
线程池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

schedule方法 定时任务 5秒后执行

在这里插入图片描述
schedulatfixedrate 会一直执行run方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
submit底层也是调用execute方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
线程执行顺序用join

在这里插入图片描述
懒汉模式线程不安全,可以用volitiel修饰,就可以解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java大猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值