自定义ThreadLocal

package concurrent;

import java.util.HashMap;
import java.util.Map; /**
* @author aloha_world_
* @date 2016年9月13日 下午11:40:52
* @version v1.00
* @description 继承自ThreadLocal类并实现其init方法
*/
public class MyThreadLocal extends ThreadLocal<Map<String, Object>> { private Map<String, Object> innerMap; @Override
protected Map<String, Object> initialValue() {
innerMap = new HashMap<String, Object>();
return innerMap;
} public Object get(String key) {
return innerMap.get(key);
} public void reset() {
innerMap.clear();
} public void set(String key, Object value) {
innerMap.put(key, value);
} @Override
public void remove() {
super.remove();
} }

操作ThreadLocal的工具类

package concurrent;

/**
* @author aloha_world_
* @date 2016年10月17日 下午10:30:23
* @version v1.00
* @description 操作ThreadLocal的工具类
*/
public class ThreadContextHolder {
public static MyThreadLocal threadLocal = new MyThreadLocal(); public static void reset() {
threadLocal.reset();
} public static void put(String key, Object value) {
threadLocal.get().put(key, value);
} public static void remove(String key) {
threadLocal.get().remove(key);
}
}

更一般的工具类

package org.alohaworld.util;

import java.util.HashMap;
import java.util.Map; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; /**
* @author aloha_world_
* @date 2016年11月7日 下午11:37:05
* @version v1.00
* @description
*/
public class ThreadContextHolder {
private static final Log logger = LogFactory.getLog(ThreadContextHolder.class); public static final ThreadLocal<Map<String, Object>> context = new MyThreadLocal(); private static class MyThreadLocal extends ThreadLocal<Map<String, Object>> {
@Override
protected Map<String, Object> initialValue() {
return new HashMap<String, Object>();
}
} public static Object get(String key) {
return getMap().get(key);
} private static Map<String, Object> getMap() {
return context.get();
} public static void put(String k, Object v) {
logger.info("key:" + k + " value:" + Thread.currentThread().getName() + " added to threadlocal");
getMap().put(k, v);
} public static void reset() {
getMap().clear();
}
}

【01-14】java ThreadLocal工具类的更多相关文章

  1. MinerDB.java 数据库工具类

    MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...

  2. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  3. java日期工具类DateUtil-续一

    上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...

  4. 基于AQS实现的Java并发工具类

    本文主要介绍一下基于AQS实现的Java并发工具类的作用,然后简单谈一下该工具类的实现原理.其实都是AQS的相关知识,只不过在AQS上包装了一下而已.本文也是基于您在有AQS的相关知识基础上,进行讲解 ...

  5. Java开发工具类集合

    Java开发工具类集合 01.MD5加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...

  6. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  7. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  8. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  9. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

随机推荐

  1. 扔鸡蛋问题详解(Egg Dropping Puzzle)

    http://blog.csdn.net/joylnwang/article/details/6769160 经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一 ...

  2. OC基础面试题

    1.iOS中delegate代理对象使用weak 之前不停的使用assign,今天在调试一段的时候,发现使用assgin的时候程序会crash,报错EXC_BAD_ACCESS, 经过一番研讨,发明如 ...

  3. 使用SQL Server视图的优缺点

    SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...

  4. es6 语法

    1.定义变量 使用let,const.let可以定义变量,相当于var,定义的变量只在局部范围内使用.const用来定义常量. 2.解构 自动解析数组或者对象中的值,比如一个函数要返回多个值,通常的做 ...

  5. Java内存一致性

    问题 前段时间在做服务注册发现的时候,有一处这样的逻辑,先发现下游服务,然后再是服务启动,服务启动完毕才能注册服务,因为注册一个在启动过程中的服务显然是不正确的设计. 然而很不巧,我们目前使用的TTh ...

  6. Python基础篇-day11 - 协程

    本节主要内容: 1.Gevent协程2.Select\Poll\Epoll异步IO与事件驱动3.RabbitMQ队列 1.Gevent协程 1.1协程的好处 无需线程上下文切换的开销无需原子操作锁定及 ...

  7. springMVC servlet 静态资源加载

    问题描述 新手使用SpringMVC时市场会遇到静态资源无法加载在问题,如下图所示 问题原因 出现这种问题一般是在web.xml中的对spring的DispatcherServlet采用了如下配置,即 ...

  8. Python第一天课程

    1.在linux下写python脚本,开头的解释器宣告的写法应该是#!/usr/bin/env python 定义变量name="XXX"  age=21   所有使用引号引起的内 ...

  9. mysql中的unix_timestamp函数

    偶然看到MySQL的一个函数 unix_timestamp(),不明就里,于是就试验了一番. unix_timestamp()函数的作用是返回一个确切的时间点的UNIX时间戳,这个Unix时间戳是一个 ...

  10. URAL 6089 Nine

    水题,找误差范围之内9最多的时间,如果有多个,选择误差最小的一个,如果还有多个,选择字典序最小的一个.同一个时间可以有不同的表示方法,例如60:15也可以表示为59:75. #include<s ...