ThreadLocal工具类做缓存(线程隔离思想)

public class ThreadLocalCache {

    private static ThreadLocal<Map<String, Object>> cache=new ThreadLocal<Map<String,Object>>();

    /**
     * 从ThreadLocal里获取缓存的值
     * @param key 要获取的数据的KEY
     * @return 要获取的值
     */
    public static Object getCache(String key) {
        Map<String, Object> map = cache.get();
        if(isCacheIsNull())
            return null;
        if(map.containsKey(key)){
            return map.get(key);
        }
        return null;
    }

    /**
     * 向ThreadLocal缓存值
     * @param key 要缓存的KEY
     * @param value 要缓存的VALUE
     */
    public static void set(String key,Object value) {
        if(!isCacheIsNull()){
            cache.get().put(key, value);
        } else{
            Map<String, Object> vmap = new HashMap<String, Object>();
            vmap.put(key, value);
            cache.set(vmap);
        }
    }

    /**
     * 根据KEY移除缓存里的数据
     * @param key
     */
    public static void removeByKey(String key){
        if(!isCacheIsNull()){
            cache.get().remove(key);
        }
    }

    /**
     * 移除当前线程缓存
     * 用于释放当前线程threadlocal资源
     */
    public static void remove(){
        cache.remove();
    }

    private static boolean isCacheIsNull(){
        return  cache.get()==null;
    }

    public static String cacheToString() {
        return isCacheIsNull() ? null : cache.get().toString();
    }
}

工具类

原文地址:https://www.cnblogs.com/zchok/p/11868559.html

时间: 2024-07-31 06:47:24

ThreadLocal工具类做缓存(线程隔离思想)的相关文章

Java并发工具类之线程间数据交换工具Exchanger

Exchanger是一个用于线程间协做的工具类,主要用于线程间的数据交换.它提供了一个同步点,在这个同步点,两个线程可以彼此交换数据.两个线程通过exchange方法交换数据,如果一个线程执行exchange方法,它就会等待另一个线程执行exchange方法,当两个线程都到达了同步点,这两个线程就可以交换数据.将本线程产生的数据传送给对方. Exchanger可用于工作的互相校对,比如我们要把线下产生的交易数据通过人工录入的方式添加到系统中,为了避免错误,我们采用AB两人同时录入的方式,当录入完

史上最全的开发工具类

    API 银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 getNameOfBank : 通过银行卡的前六位确定判断银行开户行及卡种 SharePreference缓存数据 →AppSharePreferenceMgr put : 保存数据的方法 get : 获取数据的方法 putImage: 保存图片到SharedPreferences ge

史上最全的开发工具类(转)

     API 银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位getNameOfBank : 通过银行卡的前六位确定判断银行开户行及卡种 SharePreference缓存数据 →AppSharePreferenceMgr put : 保存数据的方法get : 获取数据的方法putImage: 保存图片到SharedPreferencesgetIma

【JAVA并发】同步工具类

同步工具类主要包括闭锁(如CountDownLatch),栅栏(如CyclicBarrier),信号量(如Semaphore)和阻塞队列(如LinkedBlockingQueue)等: 使用同步工具类可以协调线程的控制流: 同步工具类封装了一些状态,这些状态决定线程是继续执行还是等待,此外同步工具类还提供了修改状态的方法: 下面将简单介绍以上同步工具类: 闭锁 可以让一个线程等待一组事件发生后(不一定要线程结束)继续执行: 以CountDownLatch为例,内部包含一个计数器,一开始初始化为一

Apache Commons 工具类介绍及简单使用

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍.   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. C

Volley随笔之网络线程和缓存线程

一.网络线程 NetworkDispatcher Volley框架中提供NetworkDispatcher类作为工作线程(work thread)处理网络请求,它继承了Thread.NetworkDispatcher在其run()方法中调用了 Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); 将网络请求线程的优先级设置成后台线程,后台线程是一个比一般线程优先级低的线程,不过能够最小限度的影响用户界面响应.工作线程先从请求

Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListener为按钮绑定事件,如下所示: //1.获取控件 btn = (Button)findViewById(R.id.button1); //2.绑定事件 btn.setOnClickListener(new OnClickListener() { @Override public void onCl

apache 工具类

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

java学习-加载.properties工具类

javaWeb项目,要加载xxx.properties或其它如.txt, .md后缀的文本文件 文本内容有两种格式 key:value或者key=value 诸如Spring框架,Jfinal框架,都是使用java.util.Properties类来加载文本配置文件 Poperties类是按行读取key和value,所以我们写配置文件时,只能一行一个key/value键值对 这些配置文件一般会在编译时打包到WEB-INF/classes/文件夹下 我们要加载时就要通过使用下面方法获取InputS