自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

sun沒有對此段代碼開放,它的功能在ArrayBlockingQueue(jdk1.5)中已經(jīng)實現(xiàn)并提供開放接口。沒有時間看下面的代碼的可直接查看ArrayBlockingQueue的api,如果對象ArrayBlockingQueue也沒有興趣的同學,可以直接調(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<Integer,Object> dataMap=new HashMap<Integer,Object>();  
  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. 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的標準數(shù)據(jù)流
  2. 影響Java NIO框架性能的因數(shù)
  3. Java的NIO以及線程并發(fā)
  4. 微軟警告稱Java乃入侵目標之首
  5. JavaScript 6看上去很美
責任編輯:林師授 來源: 十分愛的博客
相關(guān)推薦

2012-07-03 10:57:54

Hadoop核心機制

2025-04-07 11:10:00

Python列表開發(fā)

2013-08-02 14:19:50

Java日志緩存

2025-04-27 02:33:00

epoll核心機制服務器

2024-07-30 12:24:23

2010-09-14 09:30:04

Java多態(tài)

2024-02-21 12:14:00

Gochannel?panic?

2014-11-04 10:34:27

JavaCache

2011-07-13 09:12:36

2013-07-08 09:59:47

思科核心機箱思科交換機思科

2024-09-02 09:00:59

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ù)

2024-04-01 08:29:09

Git核心實例

2017-07-04 09:53:49

機房運維機房電源

2019-11-14 14:30:10

Java類反射代碼

2015-09-28 15:59:00

Java動態(tài)代理機制

2009-06-18 14:51:12

Hibernate緩存Hibernate
點贊
收藏

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