zoukankan      html  css  js  c++  java
  • 使用ThreadLocal轻松解决多线程访问

    1.ThreadLocal仿代码

    package com.tazi.aop;

    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;

    public class MyThreadLocal<T> {
        private Map<Thread,T> values=Collections.synchronizedMap(new HashMap<Thread,T>());
        public T get(){
            Thread thread=Thread.currentThread();
            T t=values.get(thread);
            //第一次获取
            if(t==null&& !values.containsKey(thread)){
                t=initValue();
                values.put(thread, t);
                return t;
            }
            return t;
        }
        public T initValue(){
            return null;
        }
        public void set(T t){
            Thread thread=Thread.currentThread();
            values.put(thread, t);
        }
       
    }

    2.使用的例子

    package com.tazi.aop;


    public class ResourceQ {
        private int count;

        public int getCount() {
            return count;
        }

        public void setCount(int count) {
            this.count = count;
        }
        public void addCount(){
            count++;
        }
       
    }

    3.

    package com.tazi.aop;


    public class ThreadLocalResourceQ {
        private static final MyThreadLocal resourceQ=new MyThreadLocal();
        public static ResourceQ getCurResourceQ(){
            ResourceQ rQ=(ResourceQ)resourceQ.get();
            if(rQ==null){ //说明当前线程还没有改局部变量的副本
                rQ=new ResourceQ();
                resourceQ.set(rQ);//把rQ放到当前线程中。
            }
            return rQ;
        }
    }

     

  • 相关阅读:
    hadoop中使用hprof工具进行性能分析
    hadoop map端的超时参数
    一次hadoop集群机器加内存的运维过程
    算法学习-回溯法
    项目中Map端内存占用的分析
    hadoop Shuffle Error OOM错误分析和解决
    算法学习-动态规划
    项目中Map端数据处理不均匀性分析
    《Hadoop技术内幕》读书笔记——Task运行过程分析
    jsp里更新Clob类型字段数据
  • 原文地址:https://www.cnblogs.com/tazi/p/2311574.html
Copyright © 2011-2022 走看看