JDK-lock锁
2017-02-25 11:27:46 0 举报
JDK-lock锁是Java中的一种内置锁机制,它提供了一种线程同步的方式。JDK-lock锁是基于Java虚拟机的监视器模型实现的,每个对象都有一个与之关联的监视器,当一个线程获取到对象的监视器时,就拥有了对该对象的操作权限。JDK-lock锁可以保证多个线程对共享资源的访问是互斥的,避免了多线程并发访问时的数据不一致问题。同时,JDK-lock锁还支持可重入性,即一个线程可以多次获取同一个对象的监视器,从而实现对共享资源的递归访问控制。总之,JDK-lock锁是一种简单易用、高效的线程同步机制,在Java多线程编程中被广泛应用。
作者其他创作
大纲/内容
将线程1封装为waitStatus=-2节点并添加到conditon等待队列
尝试获取锁
state高16位标识读锁低16位标识写锁
next
浏览器通过hash加密后的信息,对比信息的完整性,然后使用公钥解析获取密码,使用密码解密获取原始数据
head
主内存
浏览器
L2缓存
加锁成功后,会开一个后台线程每隔30s,如果判断mylock thread1 存在,则将过期时间修改为60s
线程1
pre
h
线程1第一次获取写锁state为0,则通过cas将state设置为1
write
null
a = 1
则监听当前节点的大于他的上一个节点,并处于wait()阻塞状态
cpu将主内存中的数据读取到CPU高速缓存中
线程1waitStatus =-2-->0
添加写锁
a = 1
单元测试phase
b
firstWaiter
判断线程数是否小于maxThreadSize
阻塞队列
CPU高速缓存
Worker
通过CAS递增线程数量
线程4
maven-release宿主仓库存储公司内部的release版本的包
是
阻塞队列已满
发送浏览器支持的加密规则
3rd-party仓库存放第三方jar包,例如支付类的SDK
prev
网站首先通过Hash算法计算加密后的信息是否完整。通过验证后,使用秘钥解密获取随机密码,再通过密码解密,获取原始信息
判断是否能够放入阻塞队列中或者队列是否已满
网站
site生命周期
线程4添加读锁判断当前第16位不为0,也就是写锁不为0,获取独占锁的线程不为当前线程,返回false
执行await()方法
安装到本地仓库phase
执行任务
c
CPU缓存模型
use
本地maven工程
不存在
state
将/lock下的所有节点进行排序,看当前线程的临时节点是否为最小节点
AQS子类内部有任务Runnable通过ThreadFactory工具类创建
选择一套加密算法和hash算法生成证书
创建线程
AQS
线程2第二次获取写锁获取失败,返回false
Condition等待队列
线程3waitStatus =0
将Condition等待队列中的第一个node节点移动到加锁队列的tail节点,并唤醒
释放锁
maven-snapshot宿主仓库依赖公司内部的快照jar包
执行reject策略
default生命周期
在/lock 节点下创建一个临时有序节点 /lock/thread1-000001
线程2
线程2先获取锁
maven-public仓库组
加锁成功
释放锁,并将当前线程阻塞
hashMap 高并发引发的问题
工作内存
任务1
store
ReadWriteReentrantLock
p
e
添加读锁
线程4-->nullmode=sharewaitStatus 0
lock 锁第一次获取锁
cpu
L1缓存
将Condition队列中的firstWaiter的node节点waitStatus状态改为0,然后将该node节点从Condition等待队列中移到加锁队列的tail尾节点上,并将加锁队列的上一个节点的waitStatus状态变为-1,然后执行LockSupport.unpark(),方法,唤醒线程1
获取锁
tail
存在
test plugin的功能2
监听线程1的临时有序节点能够接收到监听通知,苏醒过来,重试去获取锁
core线程池
线程2--> nullmode=独占waitStatus -1
删掉 /lock/thread1-000001临时有序节点
部署到远程仓库phase
主内存a = 1
编译单元测试代码
ConcurrentLinkedQueue
加密后的信息hash值(加密后信息通过hash)公钥加密后的密码
线程1 释放锁
load
加锁成功hset mylock thread1 1并设置过期时间60s
是,则创建线程放到core线程池中
浏览器跟网站走随机加密
否
first
zk分布式锁curator实现原理
判断mylock在hash中是否存在
加锁成功,返回null
执行signal方法
打包phase
加锁
空节点waitStatus =-1
加锁失败
read
加锁队列
加锁:lock(mylock)
lastWaiter
maven-centrl代理仓库
test plugin的功能3
该线程阻塞锁的剩余时间一段时间(通过semaphore)
并将锁id和count放入本地缓存中,重入锁的实现原理
线程池HashSet<Worker>
在zk中创建了一个/lock节点
不是
java内存模型
返回证书,包括网站地址,加密公钥,颁发机构
test plugin的功能1
线程1waitStatus =0
线程3添加读锁判断当前第16位不为0,也就是写锁不为0,获取独占锁的线程不为当前线程,返回false
maven中央仓库
线程3--》nullmode=sharewaitStatus -1
不存在,加锁失败,返回当前锁剩余时间
执行单元测试覆盖率
将Worker添加到线程池中
a
是,创建线程放到非core线程池中
线程3
执行单元测试代码
cpu频繁的读写是针对CPU缓存进行的
clean生命周期
随机生成一个密码,用该密码加密信息,并且使用hash算法加密加密后的信息。同时将该随机密码用公钥进行加密
阿里云仓库
L3缓存
并notifyAll
判断线程数是否小于coreSize
判断mylock 中 thread1是否存在
非core线程池
assign
同理网站用密码加密信息,并且将其进行hash,同时将密码使用秘钥加密
state二进制:高16位标识读锁,低16位标识写锁
last
worker线程start
q
源码编译phase
可重入锁,执行hincrby mylock hread1 1设置过期时间 60s
0 条评论
下一页