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

盐城专业做网站烟台做网站案例

盐城专业做网站,烟台做网站案例,购物网站,购物车界面如何做,大数据分析网站文章目录 前言一、优先级队列PriorityQueue 简介 二、优先级LRU总结 前言 在项目中遇到了,需要根据 优先级 LRU 缓存数据; LRU 优先考虑采用hutool ,然后自己附加搞上 一个优先级就行了 一、优先级队列 PriorityQueue 简介 PriorityQueue是基于优先级堆的无界队列。 Prior… 文章目录 前言一、优先级队列PriorityQueue 简介 二、优先级LRU总结 前言 在项目中遇到了,需要根据 优先级 LRU 缓存数据; LRU 优先考虑采用hutool ,然后自己附加搞上 一个优先级就行了 一、优先级队列 PriorityQueue 简介 PriorityQueue是基于优先级堆的无界队列。 PriorityQueue的作用是保证每次取出的都是队列中权值最小的元素也可以说是最高优先级的元素。 PriorityQueue的元素排序是按照自然排序来进行排序的在创建时可以给他添加一个给元素排序的比较器。 offer()添加元素到队列中如果队列已满则返回false。 poll()检索并删除队列中的最小元素如果队列为空则返回null。 remove()检索并删除队列中的最小元素如果队列为空则返回null。 add()添加元素到队列中。 peek()检索但不删除队列中的最小元素如果队列为空则返回null。 size()返回队列中的元素数目。 iterator()返回一个迭代器该迭代器可以按排序的顺序遍历队列中的元素。 二、优先级LRU 由于PriorityQueue 是无界队列,所以需要保证队列长度不超过最大值 由于每次获取的都是优先级最高的元素,所以采用倒叙,也就是优先级高的在最后 ,数值越小越靠后,优先级越高 采用读写锁,控制并发 import cn.hutool.cache.CacheListener; import cn.hutool.cache.CacheUtil; import cn.hutool.cache.impl.LRUCache; import cn.hutool.json.JSONUtil; import java.util.AbstractMap; import java.util.Comparator; import java.util.Map.Entry; import java.util.PriorityQueue; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.springframework.util.ObjectUtils;/*** 根据优先级 LRU 缓存数据** author fulin* since 2023/11/15 16:11*/ public class PriorityLRUCache {private PriorityLRUCache() {}// 存储最大值private static int maxSize 3;// 缓存时间 单位msprivate static int time 90000;public static void setMaxSize(int maxSize) {PriorityLRUCache.maxSize maxSize;}public static void setTime(int time) {PriorityLRUCache.time time;}// lru 存储 单位msprivate static final LRUCacheObject, Object lruCache CacheUtil.newLRUCache(maxSize * 2,time);// 优先级队列存储键值对并根据使用频率排序 降序,优先级高的在最后// 数值越小越靠后,优先级越高private static final PriorityQueueEntryObject, Integer priorityQueue new PriorityQueue(maxSize, Comparator.comparingInt(o - -(o.getValue())));private static final ReadWriteLock readWriteLock new ReentrantReadWriteLock();private static final Lock writeLock readWriteLock.writeLock();private static final Lock readLock readWriteLock.readLock();/*** 按照优先级添加元素* p超过限制将移除优先级最低元素,优先级相等则以最后新增元素为主/p** param key 元素 key* param priority 元素优先级* param value 元素 value*/public static void put(Object key, Integer priority, Object value) {writeLock.tryLock();try {if (ObjectUtils.isEmpty(priorityQueue)) {addElement(key, priority, value);return;}// 先从优先级队列中移除旧的元素if (priorityQueue.contains(key)) {priorityQueue.remove(key);lruCache.remove(key);}// 添加新的元素到优先级队列和缓存中addElement(key, priority, value);if (priorityQueue.size() maxSize) {EntryObject, Integer peek priorityQueue.peek();lruCache.remove(peek.getKey());priorityQueue.poll();}} finally {writeLock.unlock();}}/*** 添加新的元素到优先级队列和缓存中** param key 元素 key* param priority 元素优先级* param value 元素 value*/private static void addElement(Object key, Integer priority, Object value) {priorityQueue.add(new AbstractMap.SimpleEntry(key, priority));lruCache.put(key, value);}/*** 根据 key 获取缓存的值** param key 缓存 key* return 缓存的 value*/public static Object get(Object key) {readLock.tryLock();try {if (lruCache.containsKey(key)) {return lruCache.get(key);} else {return null;}} finally {readLock.unlock();}}/*** 获取无序 key 集合** return 无序 key 集合*/public static Object getPriorityQueue() {return priorityQueue;}/*** 获取当前最低优先级元素 likye,优先级/li** return 最低优先级元素*/public static EntryObject, Integer getMinPriorityElement() {return priorityQueue.peek();}/*** 设置缓存监听** param listener 监听类*/public static void setListener(CacheListenerObject, Object listener) {lruCache.setListener(listener);}public static void main(String[] args) {PriorityLRUCache.put(a, 1, 8);PriorityLRUCache.put(b, 2, 9);PriorityLRUCache.put(c, 3, 7);System.out.println(JSONUtil.toJsonPrettyStr(PriorityLRUCache.getPriorityQueue()));System.out.println(PriorityLRUCache.get(a));System.out.println(PriorityLRUCache.get(b));System.out.println(PriorityLRUCache.get(c));// 低优先级添加PriorityLRUCache.put(d, 7, 6);// 高优先级添加 // PriorityLRUCache.put(d, 2, 6);// 同优先级添加 // PriorityLRUCache.put(d, 3, 5);System.out.println(JSONUtil.toJsonPrettyStr(PriorityLRUCache.getPriorityQueue()));System.out.println(PriorityLRUCache.get(a));System.out.println(PriorityLRUCache.get(b));System.out.println(PriorityLRUCache.get(c));System.out.println(PriorityLRUCache.get(d));PriorityLRUCache.setListener((key, cachedObject) - {System.out.println(key);System.out.println(cachedObject);});} } 总结 看看长期使用效果如何吧,目前看问题不大,hutool真方便~,虽然站在巨人的肩膀上,做了点优先级的东西,但是还是收获颇丰的.
http://www.yutouwan.com/news/122599/

相关文章:

  • 最新电大网站开发维护今天的新闻摘抄
  • 合肥 中网站wordpress多图轮播
  • 哪个网站可以做免费商业推广ps做网站视图大小
  • 珠海网站专业制作电商运营怎么入门
  • 大连网站的建设seo在哪学
  • dede网站地图 调用文章找网站公司做网站是怎样的流程
  • 南昌所有建设工程网站广州seo全网营销
  • 青岛金融网站建设wordpress安装出错
  • 网站建设了推广方案广州3d网站开发
  • 自助建网站信息发布企业网站备案 必须在接入商处
  • 对高校网站建设的期待做网站好还是做安卓app好
  • 网站知识网站怎么样开网站
  • 营销型网站维护费用软文街官网
  • 从化建设局网站关停雅安网站建设
  • 大连网站快速制作wordpress发布文章后页面错误
  • 专业的网站首页建设公司网站收录需要多久
  • 世界最受欢迎的免费架站平台php做网站都需要学什么
  • 厦门百度整站优化服务营销策划方案4000字
  • 医院网站建设需要多少钱黑龙江建设网三类人员
  • 石家庄网站建设推广报价网页视频下载软件免费版
  • 做企业网站用哪个cms百度知道入口
  • 可以做淘宝推广的网站吗电脑没有网怎么升级wordpress
  • 合肥做网站哪家公司好sem优化方法
  • 济南学网站建设哪里好手机网站 做成app
  • 免费试用网站 源码奉贤北京网站建设
  • 做旅游网站的目的和意义网站建设的图片怎么加水印
  • 郑州网站建设需要多少钱农林牧渔行业网站建设
  • 深圳网站建设 骏域网站建设建设工程教育官方网站
  • 做网站建设 个体经营 小微企业平谷网站建设公司
  • 网站排名按天付费互联网it行业做什么的