偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java數(shù)據(jù)緩存實(shí)現(xiàn)的核心機(jī)制

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

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

sun沒(méi)有對(duì)此段代碼開放,它的功能在ArrayBlockingQueue(jdk1.5)中已經(jīng)實(shí)現(xiàn)并提供開放接口。沒(méi)有時(shí)間看下面的代碼的可直接查看ArrayBlockingQueue的api,如果對(duì)象ArrayBlockingQueue也沒(méi)有興趣的同學(xué),可以直接調(diào)用ConcurrentHashMap(jdk1.5), ConcurrentSkipListMap(jdk1.6),這些類,api中有更加祥細(xì)的說(shuō)明,這里不多說(shuō),需要注意的是因?yàn)榇斯δ芙鉀Q多線程并發(fā)問(wèn)題,故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<Integer,Object> dataMap=new HashMap<Integer,Object>();  
  11. static ReadWriteLock lock=new ReentrantReadWriteLock();//創(chuàng)建讀寫鎖的實(shí)例  
  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. tryif(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(); }  

原文鏈接:http://www.cnblogs.com/cx361/archive/2011/12/14/2287025.html

【編輯推薦】

  1. Java的標(biāo)準(zhǔn)數(shù)據(jù)流
  2. 影響Java NIO框架性能的因數(shù)
  3. Java的NIO以及線程并發(fā)
  4. 微軟警告稱Java乃入侵目標(biāo)之首
  5. JavaScript 6看上去很美
責(zé)任編輯:林師授 來(lái)源: 十分愛的博客
相關(guān)推薦

2012-07-03 10:57:54

Hadoop核心機(jī)制

2025-04-07 11:10:00

Python列表開發(fā)

2013-08-02 14:19:50

Java日志緩存

2025-04-27 02:33:00

epoll核心機(jī)制服務(wù)器

2024-07-30 12:24:23

2024-02-21 12:14:00

Gochannel?panic?

2010-09-14 09:30:04

Java多態(tài)

2014-11-04 10:34:27

JavaCache

2025-06-05 02:22:00

2011-07-13 09:12:36

2013-07-08 09:59:47

思科核心機(jī)箱思科交換機(jī)思科

2024-09-02 09:00:59

2025-06-26 08:56:00

AI模型系統(tǒng)

2025-02-05 12:22:21

2011-07-15 09:57:03

MongoDB緩存刷新

2009-08-03 18:35:51

ASP.NET數(shù)據(jù)緩存

2021-05-14 11:26:47

大數(shù)據(jù)

2025-05-07 01:20:11

SpringMVC核心機(jī)制

2024-04-01 08:29:09

Git核心實(shí)例

2017-07-04 09:53:49

機(jī)房運(yùn)維機(jī)房電源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)