文档章节

解决多线程并行加载缓存问题(利用guava实现)

暗中观察
 暗中观察
发布于 05/22 23:27
字数 144
阅读 8
收藏 0

依赖

com.google.guava:guava:20.0

 

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class GuavaCache {
    static Cache<String, Object> cache = CacheBuilder.newBuilder()
            .expireAfterWrite(1000,TimeUnit.SECONDS)
            .maximumSize(1000)
            .build();
    public static void main(String[] args) {

        Runnable runnable = new Runnable(){

            @Override
            public void run() {
                Object cacheVal=null;
                try {
                    cacheVal = cache.get("a", GuavaCache::loadCache);
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                System.out.println("thread:"+Thread.currentThread()+",拿到了缓存值:"+cacheVal);
            }
        };

        ExecutorService pool = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 10; i++) {
            pool.execute(runnable);
        }

        System.out.println("thread:"+Thread.currentThread()+",is end");

    }



    static Object loadCache(){
        System.out.println("开始耗时的缓存加载,thread:"+Thread.currentThread());
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "cache hui val";
    }
}

 

© 著作权归作者所有

上一篇: 归并排序
下一篇: rsync 分发脚本
暗中观察

暗中观察

粉丝 7
博文 113
码字总数 42959
作品 0
惠州
私信 提问
如何解决多线程高并发场景下的 Java 缓存问题?

作者 | LLLSQ 责编 | 郭芮 互联网软件神速发展,用户的体验度是判断一个软件好坏的重要原因,所以缓存就是必不可少的一个神器。在多线程高并发场景中往往是离不开cache的,需要根据不同的应用...

CSDN资讯
2018/09/17
0
0
集中式内存缓存Guava Cache

背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁。但是由于受限于硬盘...

力谱宿云
2016/09/08
2.9K
0
快速掌握:大型分布式系统中的缓存架构

本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。 缓存概述 缓存概述 缓存的分类 缓存主要分为四类,如下图: 缓存的分类 CDN 缓存 CDN(Content Delivery Network...

技术小能手
2018/08/06
0
0
缓存那些事儿之【本地缓存篇】

文章摘要:代码调优,SQL调优,DB服务器扩容该做的都做了,接下来该如何优化呢? 一般来说,一个业务平台系统的整体流程可以基本概括为如下图所示,用户请求从UI(浏览器或者客户端)到网络转...

癫狂侠
2017/12/08
0
0
分布式缓存系列之guava cache

guava是google的一个开源java框架,其github地址是 https://github.com/google/guava。guava工程包含了若干被Google的 Java项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching...

浮云骑士LIN
2018/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 Java语法教程 Java语言的跨平台特性

什么是平台 Java是可以跨平台的编程语言,那么首先我们需要知道什么是平台,通常我们把CPU与操作系统的整体称为平台。 CPU大家都知道,是计算机的大脑,它既负责思维运算,又负责计算机中各种...

老码农的一亩三分地
4分钟前
0
0
http传值问题

这两天遇到一个问题 ,与一个渠道联调接口,http请求,展示ptf 的需求,服务方以一个二进制的方式返回。 当时我们在一开始开发的时候,我们按照读取文件的方式处理,本地存一个ptf 的方式 ,...

鬼才王
12分钟前
0
0
【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看

不是线程的安全 面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。 论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。...

中关村的老男孩
13分钟前
4
0
5.01- Druid数据源配置

1、配置项 配置 缺省值 说明 name 无 配置这个属性的意义在于,如果存在多个数据源,监控的时候 可以通过名字来区分开来。如果没有配置,将会生成一个名字, 格式是:"DataSource-" + Syste...

静以修身2025
17分钟前
0
0
itop4412开发板-Linux内核的编译

本篇文章基于itop4412开发板 5.3.2.1源码目录 Linux 内核源码在光盘“06_源码_uboot 和 kernel”目录下,如下图所示。 5.3.2.2 编译器 内核的编译器和 uboot 的编译器一样,参考“5.3.1.2 编...

书白
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部