• 使用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;
        }
    }

     

  • 相关阅读:
    火车头采集标题如何伪原创(附教程)
    神经网络的模型分为哪几类,神经网络训练模型描述
    CSS background-color 详细说明 ccs修改背景颜色
    三大神经网络模型,神经网络简单实例
    golang查看数据类型
    git根据某个commit创建分支
    RocketMQ在在CentOS7中使用systemctl方式启动
    CentOS7使用firewall-cmd打开关闭防火墙与端口
    1,6,18,30,75的规律php版本
    发现自己
  • 原文地址:https://www.cnblogs.com/tazi/p/2311574.html
Copyright © 2020-2023  润新知