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

水利工程建设监理网站设计网名的软件

水利工程建设监理网站,设计网名的软件,wordpress 图片外链插件,国内最炫酷的网站一、读锁和写锁概念 读锁#xff1a; 也称共享锁#xff0c;多个线程可以共享资源#xff0c;同时读取数据和资源#xff0c;但是不允许出现写操作。多个线程可以同时持有读锁#xff0c;提高并发性能#xff0c;因为不会对数据修改。 写锁#xff1a; 也称排他锁 也称共享锁多个线程可以共享资源同时读取数据和资源但是不允许出现写操作。多个线程可以同时持有读锁提高并发性能因为不会对数据修改。 写锁 也称排他锁只允许一个线程独占地对共享资源进行写操作其他线程无法同时持有写锁或读锁。写锁的目的是保证在写操作期间没有其他线程对资源进行读或写操作从而确保数据的一致性。 使用场景 如果多个线程只需要读取共享资源而不进行修改那么可以使用读锁来提高并发性能。 如果有线程需要修改共享资源那么必须使用写锁来保证数据的一致性。 二、ReentrantReadWriteLock ReentrantReadWriteLock 实现了 ReadWriteLock 接口可以获取到读锁共享锁写锁独占锁。同时通过构造方法可以创建锁本身是公平锁还是非公锁。 默认是非公平锁性能也更好一点。构造方法传入 true 时为公平锁。 只有读锁与读锁之间是共享的其他的读锁与写锁写锁与写锁都是互斥的不能同时持有。 2.1 线程进入读锁的前提条件 不持有其他线程的写锁没有写请求或有写请求但调用线程和持有锁的线程是同一个 2.2 线程进入写锁的前提条件 没有其他线程的读锁没有其线程的写锁 2.3 锁升级和锁降级 ReentrantLock 具备可重入的能力即同一个线程多次获取锁不引起阻塞 那么 ReentrantReadWriteLock 关于可重入性需要额外知晓两个概念即锁升级和降级 锁升级读锁变为写锁 锁降级写锁变为读锁 重入时锁升级不支持持有读锁的情况下去获取写锁会导致获取写锁永久等待需要先释放读锁再去获得写锁 重入时锁降级支持持有写锁的情况下去获取读锁造成只有当前线程会持有读锁因为写锁会互斥其他的锁 2.4 使用介绍 构造方法 public ReentrantReadWriteLock()默认构造方法非公平锁 public ReentrantReadWriteLock(boolean fair)true 为公平锁 常用API public ReentrantReadWriteLock.ReadLock readLock()返回读锁 public ReentrantReadWriteLock.WriteLock writeLock()返回写锁 lock()加锁 unlock()解锁 tryLock()尝试获取锁 加解锁 ReadWriteLock readWriteLock new ReentrantReadWriteLock();Lock readLock readWriteLock.readLock();readLock.lock();try {// ........ 临界区} finally {readLock.unlock();}锁降级 w.lock(); try {r.lock(); // 降级为读锁, 释放写锁, 这样能够让其它线程读取缓存try {// ...} finally{w.unlock(); // 要在写锁释放之前获取读锁} } finally{r.unlock(); }2.5 运用场景 读写锁读多的写少的场景一般为使用缓存的场景。 即读取数据库中的数据到内存或者缓存中间件中后期获取数据从缓存获取当数据更新时需要同步更新缓存和数据库。 先清除缓存还是前更新数据库 先清缓存可能造成刚清理缓存还没有更新数据库高并发下其他线程直接查询了数据库过期数据到缓存中这种情况非常严重直接导致后续所有的请求缓存和数据库不一致。 先更新据库可能造成刚更新数据库还没清空缓存就有线程从缓存拿到了旧数据这种情况概率比较小影响范围有限只对这一次的查询结果有问题。 实际在缓存中运用读写锁 public class CacheTest {// 缓存对象 这里使用一般map 放于内存MapString, String cache new HashMap();// 创建读写锁ReadWriteLock readWriteLock new ReentrantReadWriteLock();// 从缓存中获取数据 读操作public String getFromCache(String key) {// 加读锁防止其他线程修改缓存即防止写操作readWriteLock.readLock().lock();try {String value cache.get(key);// 缓存中存在 即缓存命中if(value ! null) {return value;}} finally {// 释放读锁readWriteLock.readLock().unlock();}//如果缓存没有命中从数据库中加载 加写锁readWriteLock.writeLock().lock();try {// 细节处理为防止重复查询数据库, 再次验证 因为get 方法上面部分是可能多个线程进来的, 可能已经向缓存填充了数据String value cache.get(key);if(value null) {// 从数据库查询value 从数据库中获取到数据并赋值 这里自行替换业务;cache.put(key, value);}return value;} finally {// 解锁写readWriteLock.writeLock().unlock();}}// 更新数据public void updateData(String key, String value) {// 加写锁readWriteLock.writeLock().lock();try {// 更新操作TODO 更新数据库// 清空缓存cache.remove(key);} finally {// 解锁写readWriteLock.writeLock().unlock();}} }
http://www.pierceye.com/news/16821/

相关文章:

  • wordpress高仿公众号在运营中seo是什么意思
  • 网站开发er图免费发布信息网站大全下载安装
  • 营销型网站用什么模版合适网店美工的职责
  • 如何查询网站注册信息免费网站系统下载
  • 灵璧县建设局网站提高网站收录
  • 网站建设找客户如何恢复网站
  • 中瑞网络网站建设流程网站建设项目管理
  • 网站建设有关图片wordpress盒子
  • 安徽网站设计流程门户网站建设为企业带来的好处
  • 替人做赌彩网站网站建设的基础服务器
  • 安徽建站贵吗北京好用的h5建站
  • 内蒙古网站开发论坛
  • 网站建设实训报告常州seo网络推广
  • 网站开发商怎么关闭图片显示建站网站怎么上传代码
  • 网站开发网站说明怎么写自己在线制作logo免费网站
  • 电商网站如何存储图片做网站有没有受骗过
  • 有哪些网站建设公司在长沙做网站
  • 做网站需要会的软件网站建设 提成
  • 灯具的网站建设漫画门户网站怎么做的
  • 网站建设与维护协议凡科登录入口官网
  • 网站服务器有什么用自己做网站给自己淘宝引流
  • 如何建立单页网站口碑好的聊城网站建设
  • 京东网站的建设与发展现状惠州网站开发公司
  • 甘肃建设厅网站好了吗校园电子商务是什么
  • wordpress资讯图片主题搜索引擎优化英文简称
  • 企业网站的布局wordpress做中文官网
  • 网站建设程序开发psd下载网站模板
  • 营销型网站建设公司电话网站整站开发项目亮点
  • 获取网站访客qq号码代码姜堰住房和城乡建设厅网站首页
  • 高端网站设计建站稿定设计手机版下载