日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java數(shù)據(jù)緩存實現(xiàn)的核心機制

在大數(shù)據(jù)量訪問讀取中,數(shù)據(jù)緩存是最普遍采用的解決方案之一,但在讀過很多代碼的緩存實現(xiàn),代碼可圈可點的彈性都很大,在一并發(fā)數(shù)不多時,功能是完全沒有問題的,但是對大數(shù)量的多并發(fā)操作上就有些差強人意了。以下為集數(shù)家之長實現(xiàn)的數(shù)據(jù)緩存核心機制代碼片段,以拋磚引玉,供大家學(xué)習(xí),此片段的核心代碼參考sun的源碼實現(xiàn)。

尼元陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),尼元陽網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為尼元陽上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的尼元陽做網(wǎng)站的公司定做!

sun沒有對此段代碼開放,它的功能在ArrayBlockingQueue(jdk1.5)中已經(jīng)實現(xiàn)并提供開放接口。沒有時間看下面的代碼的可直接查看ArrayBlockingQueue的api,如果對象ArrayBlockingQueue也沒有興趣的同學(xué),可以直接調(diào)用ConcurrentHashMap(jdk1.5), ConcurrentSkipListMap(jdk1.6),這些類,api中有更加祥細的說明,這里不多說,需要注意的是因為此功能解決多線程并發(fā)問題,故null不能做為key和value的鍵值,可以理解為HashTable的提升。

 
 
 
  1. package com.henry;  
  2.  
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5. import java.util.Random;  
  6. import java.util.concurrent.locks.ReadWriteLock;  
  7. import java.util.concurrent.locks.ReentrantReadWriteLock;  
  8.  
  9. public class CacheDataTest {  
  10. static Map dataMap=new HashMap();  
  11. static ReadWriteLock lock=new ReentrantReadWriteLock();//創(chuàng)建讀寫鎖的實例  
  12. static Object getData(Integer key){  
  13. lock.readLock().lock();//讀取前先上鎖  
  14. Object val=null;  
  15. try{  
  16. val=dataMap.get(key);  
  17. if(val == null){  
  18. // Must release read lock before acquiring write lock  
  19. lock.readLock().unlock();  
  20. lock.writeLock().lock();  
  21. try{ if(val==null){  
  22. //dataMap.put(key, "");//query from db  
  23. val=queryDataFromDB(key); }finally{  
  24. //Downgrade by acquiring read lock before releasing write lock  
  25. lock.readLock().lock();  
  26. // Unlock write, still hold read  
  27. lock.writeLock().unlock(); }  
  28. }finally{  
  29. lock.readLock().unlock();//最后一定不要忘記釋放鎖 System.out.println("get data key="+key+">val="+val);  
  30. return val;   
  31. static Object queryDataFromDB(Integer key){  
  32. Object val=new Random().nextInt(1000);  
  33. dataMap.put(key, val);  
  34. System.out.println("write into data key="+key+">val="+val);  
  35. return val;  
  36. }  
  37.  
  38.  
  39. public static void main(String[] args) {  
  40. for(int i=0;i<10;i++){  
  41. new Thread(new Runnable(){public void run() {  
  42. getData(new Random().nextInt(5));  
  43. }}).start(); }  

當(dāng)前題目:Java數(shù)據(jù)緩存實現(xiàn)的核心機制
本文來源:http://m.5511xx.com/article/cojpegs.html