java 写入缓存_java怎样将数据保存到缓存中,之后再保存

该博客介绍了一种在Java中使用读写锁(ReentrantReadWriteLock)实现缓存数据的方法。通过创建一个静态HashMap作为缓存,并利用读写锁确保并发访问时的数据一致性。在获取数据时,如果缓存中没有,则释放读锁并获取写锁,从数据库查询数据后再写回缓存,最后降级回读锁。示例代码展示了如何在多线程环境下安全地进行缓存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

展开全部

Java中可以使用队列来保存62616964757a686964616fe59b9ee7ad9431333337613163数据,当使用的时候,加上锁,防止其他进程访问,当不用的时候保存到数据库里面,示例如下:package com.henry;

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

import java.util.concurrent.locks.ReadWriteLock;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class CacheDataTest {

static Map dataMap=new HashMap();

static ReadWriteLock lock=new ReentrantReadWriteLock();//创建读写锁的实例

static Object getData(Integer key){

lock.readLock().lock();//读取前先上锁

Object val=null;

try{

val=dataMap.get(key);

if(val == null){

// Must release read lock before acquiring write lock

lock.readLock().unlock();

lock.writeLock().lock();

try{

//可能已经由其他线程写入数据

if(val==null){

//dataMap.put(key, "");//query from db

val=queryDataFromDB(key);

}

}finally{

//Downgrade by acquiring read lock before releasing write lock

lock.readLock().lock();

// Unlock write, still hold read

lock.writeLock().unlock();

}

}

}finally{

lock.readLock().unlock();//最后一定不要忘记释放锁

}

System.out.println("get data key="+key+">val="+val);

return val;

}

static Object queryDataFromDB(Integer key){

Object val=new Random().nextInt(1000);

dataMap.put(key, val);

System.out.println("write into data key="+key+">val="+val);

return val;

}

public static void main(String[] args) {

for(int i=0;i<10;i++){

new Thread(new Runnable(){public void run() {

getData(new Random().nextInt(5));

}}).start();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值