化物的英文译语怎么说-动词不定式


2023年4月5日发(作者:新概念英语第二册视频下载)

Java并发编程:ConcurrentHashMap的使⽤,实现⼀个简单的缓

存⼯具类

概述

ConcurrentHashMap是线程安全且⾼效的HashMap

问:为什么使⽤ConcurrentHashMap?

在并发编程中使⽤HashMap,会出现ConcurrentModificationException异常、会引起程序死循环等情况。使⽤线程安全的Hashtable的话效

率太低,ConcurrentHashMap保证了线程安全的同时⼜保证了⾼效的操作。

多线程下,HashMap为什么会出现死循环?

HashMap出现死循环java7和java8不太⼀样。

java7出现在扩容的场合,因为头插法导致链表死循环,java8使⽤了数组+链表+红⿊树以及尾插法修复了这个问题,不过在PutTreeValue的时

候可能会出现Node节点转换为TreeNode结点异常,所以多线程下不要使⽤HashMap。

使⽤ConcurrentHashMap实现本地缓存

1.创建包:r1,并创建缓存实体类CacheObj

r1;

/**

*@ClassNameCacheObj

*@Description//缓存对象类

*@AuthorsingleZhang

*@*********************

*@Date2020/12/240024下午3:30

**/

publicclassCacheObj{

/**

*缓存对象

*/

privateObjectCacheValue;

/**

*缓存过期时间

*/

privateLongexpireTime;

CacheObj(ObjectcacheValue,LongexpireTime){

CacheValue=cacheValue;

Time=expireTime;

}

ObjectgetCacheValue(){

r遁形的意思 eturnCacheValue;

}

LonggetExpireTime(){

returnexpireTime;

}

@Override

publicStringtoString(){

return\"CacheObj{\"+

\"CacheValue=\"+CacheValue+

\",expireTime=\"+expireTime+

\'}\';

}

}

2.创建过期缓存清理线程类CleanCacheThread

r1;

/**

*@ClassNameCleanCacheThread

*@De世说新语 scription//清理过期缓存线程

*@AuthorsingleZhang

*@*********************

*@Date2020/12/240024下午3:37

**/

publicclassCleanCacheThreadimplementsRunnable{

@Override

publicvoidrun(){

anThrea飞花两岸照船红的参照物 dRun();

while(true){

n(\"cleanthreadrun\");

TimeOut();

try{

(_MINUTE);

}catch(InterruptedExceptione){

tackTrace();

}

}

}

}

3.创建ConcurrentHashMap缓存⼯具类ConcurrentHashMapCacheUtil

r1;

;

Factory;

List;

;

;

rentHashMap;

/**

*@ClassNameConcurrentHashMapCacheUtil

*@Description//使⽤ConcurrentHashMap做本地缓存

*@AuthorsingleZhang

*@*********************

*@Date2020/12/240024下午3:23

**/

publicclassConcurrentHashMapCacheUtil{

privatestaticLoggerLOGGER=ger();

/**

*缓存最⼤个数

*/

privatestaticfinalIntegerCACHE_MAX_NUMBER=1000;

/**

*当前缓存个数

*/

privatestaticIntegerCURRENT_SIZE=0;

/**

*时间⼀分钟

*/

staticfinalLongONE_MINUTE=60*1000L;

/**

*缓存对象

*/

privatestaticfinalMapCACHE_OBJECT_MAP=newConcurrentHashMap<>();

/**

*这个记录了缓存使⽤的最后⼀次的记录,最近使⽤的在最前⾯

*/

*/

privatestaticfinalListCACHE_USE_LOG_LIST=newLinkedList<>();

/**

*清理过期缓存是否在运⾏

*/

privatestaticvolatileBooleanCLEAN_THREAD_IS_RUN=false;

/**

*设置缓存

*/

publicstaticvoidsetCache(StringcacheKey,ObjectcacheValue,longcacheTime){

LongexpireTime=null;

if(cacheTime<=0L){

if(cacheTime==-1L){

expireTime=-和盘托出 1L;

}else{

return;

}

}

checkSize();

saveCacheUseLog(cacheKey);

CURRENT_SIZE=CURRENT_SIZE+1;

if(expireTime==null){

expireTime=tTimeMillis()+cacheTime;

}

CacheObjcacheObj=newCacheObj(cacheValue,expireTime);

CACHE_OBJECT_(cacheKey,cach小学一年级古诗大全带拼音免费 eObj);

(\"havesetkey:\"+cacheKey);

}

/**

*设置缓存

*/

publicstaticvoidsetCache(StringcacheKey,ObjectcacheValue){

setCache(cacheKey,cacheValue,-1L);

}

/**

*获取缓存

*/

publicstaticObjectgetCache(StringcacheKey){

startCleanThread();

if(checkCache(cacheKey)){

saveCacheUseLog(cacheKey);

returnCACHE_OBJECT_(cacheKey).getCacheValue();

}

returnnull;

}

publicstaticbooleanisExist(StringcacheKey){

returncheckCache(cacheKey);

}

/**

*删除所有缓存

*/

publicstaticvoidclear(){

(\"havecleanallkey!\");

CACHE_OBJECT_();

CURRENT_SIZE=0;

}

/**

*删除某个缓存

*/

publicstaticvoiddeleteCache(StringcacheKey){

ObjectcacheValue=CACHE_OBJECT_(cacheKey);

if(cacheValue!=null){

(\"havedeletekey:\"+cacheKey);

CURRENT_SIZE=CURRENT_SIZE-1;

}

}

/**

*判断缓存在不在,过没过期

*/

privatestaticbooleancheckCache(StringcacheKey){

CacheObjcacheObj=CACHE_OBJECT_(cacheKey);

if(cac分辨的反义词有哪些 heObj==null){

returnfalse;

returnfalse;

}

if(ireTime()==-1L){

returntrue;

}

if(ireTime()

deleteCache(cacheKey);

returnfalse;

}

returntrue;

}

/**

*删除最近最久未使⽤的缓存

*/

privatestaticvoiddeleteLRU(){

(\"deleteLeastrecentlyusedrun!\");

StringcacheKey=null;

synchronized(CACHE_USE_LOG_LIST){

if(CACHE_USE_LOG_()>=CACHE_MAX_NUMBER-10){

cacheKey=CACHE_USE_LOG_(CAC赞美老师的诗句现代诗 HE_USE_LOG_()-1);

}

}

if(cacheKey!=null){

deleteCache(cacheKey);

}

}

/**

*删除过期的缓存

*/

staticvoidd江雪古诗视频朗读视频 eleteTimeOut(){

(\"deletetimeoutrun!\");

ListdeleteKeyList=newLinkedList<>();

for(entry:CACHE_OBJECT_et()){

if(ue().getExpireTime()

(());

}

}

for(StringdeleteKey:deleteKeyList){

deleteCache(deleteKey);

}

(\"deletecachecountis:\"+());

}

/**

*检查⼤⼩

*当当前⼤⼩如果已经达到最⼤⼤⼩

*⾸先删除过期缓存,如果过期缓存删除过后还是达到最⼤缓存数⽬

*删除最久未使⽤缓存

*/

privatestaticvoidcheckSize(){

if(CURRENT_SIZE>=CACHE_MAX_NUMBER){

deleteTimeOut();

}

if(CURRENT_SIZE>=CACHE_MAX_NUMBER){

deleteLRU();

}

}

/**

*保存缓存的使⽤记录

*/

privatestat唯有相思不可医 icsynchronizedvoidsaveCacheUseLog(StringcacheKey){

synchronized(CACHE_USE_LOG_LIST){

CACHE_USE_LOG_(cacheKey);

CACHE_USE_LOG_(0,cacheKey);

}

}

/**

*设置清理线程的运⾏状态为正在运⾏

*/

staticvoidsetCleanThreadRun(){

CLEAN_THREAD_IS_RUN=true;

}

}

/**

*开启清理过期缓存的线程

*/

privatestaticvoidstartCleanThread(){

if(!CLEAN_THREAD_IS_RUN){

CleanCacheThreadcleanCacheThread=newCleanCacheThread();

Threadthread=newThread(cleanCacheThread);

//设置为后台守护线程

mon(true);

();

}

}

}

如此,就完成了⼀个简单的缓存类

更多推荐

concurrent是什么意思current在线翻译读音