java并发编程之显式锁、AQS入门

lock接口和核心方法

synchronized

reentrantlock 可重入锁

lock核心方法

void lock();
boolean tryLock();
void unlock();

lock接口与syc的比较

syc代码简单

lock:获取锁可被中断,获取锁超时,尝试获取锁,读多写少用读写锁。

可重入锁ReentrantLock、锁的公平与不公平

如果在时间上,先尝试获取锁的请求,一定先被满足,则这个锁就是公平锁。否则非公平锁。

一般情况,非公平锁的效率更高一些。

ReadWriteLock接口与ReentrantReadWriteLock

ReentrantLock和syn关键字都是排它锁。

读写锁:同一时间允许多个读线程同时访问资源,但是当写线程访问的时候,所有的读写线程全部阻塞,适合读多写少的场景。

condition接口

用Lock和condition实现等待通知

LockSupport工具

park开头的方法,用来阻塞线程

unpark(Thread thread) 用来唤醒线程

AQS:AbstractQueuedSynchronizer

什么事AQS?学习它的必要性

AQS的使用方式:继承

其中的设计模式:模板模式

了解其中的方法:

模板方法:

  1. 独占式获取锁:
    1. acquire(int arg)
    2. acquireInterruptibly(int arg)
    3. tryAcquire(int arg)
  2. 共享式获取锁:
    1. acquireShared(int arg)
    2. acquireSharedInterruptibly(int arg)
    3. tryAcquireSharedNanos(int arg, long nanosTimeout)
  3. 独占式释放锁:
    1. release(int arg)
  4. 共享式释放锁:
    1. releaseShared(int arg)

需要子类覆盖的模板方法:

  1. 独占式获取 acquire(int arg)
  2. 独占式释放 release(int arg)
  3. 共享式获取 acquireSharedInterruptibly(int arg)
  4. 共享式释放 releaseShared(int arg)
  5. 这个同步器是否处于独占模式  isHeldExclusively()

同步状态state:

  1. getState() 获取当前的同步状态
  2. setState(int newState)  设置当前的同步状态
  3. compareAndSetState(int expect, int update) 使用CAS设置同步状态,保证状态设置的原子性。

案例实操:java并发编程之模拟ReentrantLock独占锁

AQS实现原理

内部类:

  • Node 
    • CANCELLED 线程等待超时或者是被中断了,需要从队列中移除
    • SIGNAL 后续节点等待状态,当前节点等待后续节点去运行
    • CONDITION 当前节点处于等待队列
    • PROPAGATE 共享锁,当前状态向后面等待的线程传播
    •  

 

没写完。。。

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值