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;
        }
    }

     

  • 相关阅读:
    JavaScript的作用域
    background的水平条纹和斜向条纹
    CSS currentColor 变量的使用
    pop()和attr()的用法和区别
    指向构造函数的属性值
    OKHTTP缓存max-age和max-stale详解
    js数据类型
    css两列布局之基于BFC规则实现
    vue中央事件总线eventBus的简单理解和使用
    git push 时提示用户名或密码相关错误信息
  • 原文地址:https://www.cnblogs.com/tazi/p/2311574.html
Copyright © 2011-2022 走看看