当前位置: 首页 > news >正文

主播网站怎么建立炒币做合约哪个网站最好

主播网站怎么建立,炒币做合约哪个网站最好,wordpress名片,wordpress加载模板1 介绍 为什么要使用读写锁? 需要高并发读取和较低并发写入的应用程序,降低锁的粒度,提高系统性能 使用场景: 读多写少的共享资源 缓存管理:读 >> 写,控制多个线程同时读缓存,需要刷新o…

1 介绍

为什么要使用读写锁?

        需要高并发读取和较低并发写入的应用程序,降低锁的粒度,提高系统性能

使用场景

        读多写少的共享资源

        缓存管理:读 >> 写,控制多个线程同时读缓存,需要刷新or修改操作时才使用写锁

        数据库连接池:多个线程从池中获取连接(读操作),只有一个线程可以设置连接到池中(写操作)

        文件读写

        数据结构的并发访问

2 使用

import java.util.concurrent.locks.ReentrantReadWriteLock;public class SharedResource {private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();private final ReentrantReadWriteLock.ReadLock readLock = lock.readLock();private final ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();public void readFromResource() {readLock.lock(); // 获取读锁try {// 执行读取共享资源的操作} finally {readLock.unlock(); // 释放读锁}}public void writeToResource() {writeLock.lock(); // 获取写锁try {// 执行写入共享资源的操作} finally {writeLock.unlock(); // 释放写锁}}
}

3 原理分析

读写锁两个状态,读状态、写状态

但AQS中只有一个state,如何记录两种状态?

        高低位;int4个字节,共32位,采用高16位控制读,低16位控制写

00000000 00000000 00000000 00000000

加锁时如何判断读锁、写锁?

        高16位>0,表示有读锁(sharedCount())

        低16位>0,表示有写锁(exclusiveCount())

如何实现可重入?

        写锁只有一个线程独占,重入则低16位+1即可

        写锁有多个线程持有,如何记录?ThreadLocal线程私有

4 读锁源码

读锁:tryAcquireShared()、tryReleaseShared();读读共享

protected final int tryAcquireShared(int unused) {Thread current = Thread.currentThread();int c = getState();//是否其它线程占用排它锁,如果是则不允许获取共享锁if (exclusiveCount(c) != 0 &&getExclusiveOwnerThread() != current)return -1;//共享锁被获取的数量int r = sharedCount(c);//获取共享锁//1 未阻塞//2 不超最大读计数//3 设置共享锁成功if (!readerShouldBlock() &&r < MAX_COUNT &&compareAndSetState(c, c + SHARED_UNIT)) {//第一次读if (r == 0) {firstReader = current;firstReaderHoldCount = 1;//重入} else if (firstReader == current) {firstReaderHoldCount++;} else {//其它线程读HoldCounter rh = cachedHoldCounter;if (rh == null || rh.tid != getThreadId(current))//记录每个线程的重入次数cachedHoldCounter = rh = readHolds.get();else if (rh.count == 0)readHolds.set(rh);rh.count++;}return 1;}//若不满足上述条件,则执行方法内的获取共享锁逻辑return fullTryAcquireShared(current);}
final int fullTryAcquireShared(Thread current) {HoldCounter rh = null;//1 自旋 获取共享锁or失败for (;;) {int c = getState();//2 若存在写锁,且不是当前线程持有的,不允许获取共享锁if (exclusiveCount(c) != 0) {if (getExclusiveOwnerThread() != current)return -1;//3 读线程阻塞} else if (readerShouldBlock()) {if (firstReader == current) {} else {if (rh == null) {rh = cachedHoldCounter;if (rh == null || rh.tid != getThreadId(current)) {rh = readHolds.get();if (rh.count == 0)readHolds.remove();}}if (rh.count == 0)return -1;}}// 4 不允许再申请共享锁if (sharedCount(c) == MAX_COUNT)throw new Error("Maximum lock count exceeded");// 5 尝试获取锁if (compareAndSetState(c, c + SHARED_UNIT)) {if (sharedCount(c) == 0) {firstReader = current;firstReaderHoldCount = 1;} else if (firstReader == current) {firstReaderHoldCount++;} else {if (rh == null)rh = cachedHoldCounter;if (rh == null || rh.tid != getThreadId(current))rh = readHolds.get();else if (rh.count == 0)readHolds.set(rh);rh.count++;cachedHoldCounter = rh; // cache for release}return 1;}}}

5 写锁源码

写锁:tryAcquire()、tryRelease();写写互斥,读写互斥

protected final boolean tryAcquire(int acquires) {Thread current = Thread.currentThread();int c = getState();int w = exclusiveCount(c);if (c != 0) {// (Note: if c != 0 and w == 0 then shared count != 0)if (w == 0 || current != getExclusiveOwnerThread())return false;if (w + exclusiveCount(acquires) > MAX_COUNT)throw new Error("Maximum lock count exceeded");// Reentrant acquiresetState(c + acquires);return true;}if (writerShouldBlock() ||!compareAndSetState(c, c + acquires))return false;setExclusiveOwnerThread(current);return true;}

http://www.yayakq.cn/news/370529/

相关文章:

  • 广东网站建设费用网站优化公司排行
  • 路桥贝斯特做网站好吗网站建设当前位置图标
  • 如何让各大搜索引擎识别新建网站云空间可以做网站
  • 内网建设网站小程序平台介绍怎么写
  • 南通制作网站公司企业起名网站怎么做
  • 广州外贸网站开发优秀设计赏析网站
  • 大学有吗网站建设飞翔时代网站建设
  • 望京网站开发西部数码装wordpress
  • 郑州哪家公司做网站好怎样进入公众号
  • 网站后台被百度蜘蛛抓取苏州和城乡建设局网站
  • 单位网站维护 网站建设岗位宁波seo推广哪家公司好
  • 织梦做淘宝客网站视频教程百度指数的数据来源
  • 哪个网站可以做纸箱怎么拿到百度推广的代理
  • 东营 网站建设网站开发实战视频教程
  • 青岛建设网站的公司服装网站建设教程
  • 渭南中学校园网站建设工作汇报网站手机版模板
  • 广元做网站站排名安康创宇网站制作建设
  • 搜索词热度查询重庆seo网络营销
  • 网站建设定制公司网站维护合同模板
  • 聚云测网站怎么做的河北项目网手机版
  • 2019做网站施工企业资料
  • 东莞网站建设市场哪个网站是专门做招商的平台
  • 网站建设简介是什么代理游戏平台赚钱吗
  • 网站开发中心公司建设网站需求
  • 网站如何防止黑客攻击网站深圳优化建设
  • 电器网站建设目的可以做审计初级题的网站
  • 网站推广软件免费版手机建网站 优帮云
  • 网站推广费用预算可以做网络推广的网站
  • 学校网站建设论文网站案例演示
  • thinkphp做网站教程蕲春县住房和城乡建设局网站