8、等待/通知模式

###等待/通知模式分为2种
1、Java基类中的wait,notify,notifyAll
2、Condition接口的await(),signal();
3、LockSupport工具类park(),unpark()

###区别
1、Java基类中的wait,notify,notifyAll
使用Synchronized 实现的,悲观锁(也叫重量级锁)。性能差,并发基本上不用
2、无锁编程,Java 并发包(JUC)
Codition是要配合ReentactLock使用的。实现原理是CAS原理。
Condition维护了一个队列,该队列叫等待队列(是将await的线程放入等待队列中,这个队列和AQS竞争锁的阻塞队列(CLH)不一样)
只有被唤醒的线程,才会进入CLH队列里。
Condition的await方法就是用LockSupport.Park()方法实现的。
Condition的signal方法就是用LockSuport.unpark()方法实现的
Unsafe类中调用JNI(Java native interfce Java本地调用),使CPU自旋。
LockSupport 也是同样的使用Unsafe 类来实现的。
###CAS原理
compare and swap 比较并替换
线程A 和线程B 同时想要获取主内存中的int i=0;
A: i++ 使i=1
B:认为A会执行成功,所以以为A是1,B也执行i++;B想要的结果是2;

CAS 也是使用Unsafe类中的compareAndSwapInt

B线程会进行CAS
B线程会获取 主内存中的数据E,期待是A已经将数据改为1(B),如果E 期待值B,则执行1++,设置数据为2(V)
如果E
0,则继续循环,直到E==1.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值