- 浏览: 162262 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mengyue0477:
最后还不忘吐槽一下 哈哈 太逗了
spring容器的懒加载lazy-init设置 -
comet0515:
不是maven工程能不能用checkstyle插件?job是一 ...
jenkins 配置checkstyle -
xfxlch:
http://docs.spring.io/spring-bo ...
NoteBook -
With_Me_Forever:
太浅了。我最近也在看着方面的资料,一起进步把。
互联网金融定义 -
xfxlch:
在http://r.m.baidu.com/6pmxgig
NoteBook
ThreadLocal基于线程的数据存储结构。ThreadLocal是类型于Map的一种数据结构,它以当前线程的ThreadLocal为key,来实现当前线程范围内的局部变量对象的共享。其保存和获取的方法是set(Object)和get()。
应用实例:
此实例就通过ThreadLocal这个对象来达到MyThreadScopeData 实例对象在当前线程范围内(这里是Module A和Module B)共享同一个对象。并且通过单例的模式,很好的屏蔽了ThreadLocal对外部模块的可见性。
Set(T)的源代码如下:
把要保存的对象保存到ThreadLocalMap这个对象中,并且以ThreadLocal本身作为key,如果此Map一开始不存在,就去初始化一个Map,然后保存值Value。
应用实例:
/** * <br> * do what you want to do and never stop it. * <br> */ package com.luch.thread; import java.util.Random; /** * @author Jack * Jul 7, 2014 * <br> */ public class ThreadScopeShareData { /** * @param args */ public static void main(String[] args) { for(int i =0; i < 2; i++) { new Thread(new Runnable(){ public void run() { int data = new Random().nextInt(); System.out.println(Thread.currentThread().getName() + " has put count:" +data); MyThreadScopeData.getInstance().setName("name"+data); System.out.println(Thread.currentThread().getName() +" MyThreadScopeData: " + MyThreadScopeData.getInstance()); new A().get(); new B().get(); } }).start(); } } static class A{ public void get(){ System.out.println("A " + Thread.currentThread().getName() + " Singlton: " + MyThreadScopeData.getInstance()); System.out.println("A " + Thread.currentThread().getName() + " has get count:" +MyThreadScopeData.getInstance().getName()); } } static class B{ public void get(){ System.out.println("B " + Thread.currentThread().getName() + " Singlton: "+MyThreadScopeData.getInstance()); System.out.println("B " + Thread.currentThread().getName() + " has get count:" +MyThreadScopeData.getInstance().getName()); } } static class MyThreadScopeData{ private String name; private int age; private MyThreadScopeData(){} //private static volatile MyThreadScopeData instance; public static /*synchronized*/ MyThreadScopeData getInstance(){ MyThreadScopeData instance = map.get(); if (instance == null) { instance = new MyThreadScopeData(); map.set(instance); } return instance; } public static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>(); public String getName() { System.out.println("getName:" + Thread.currentThread().getName() + " name=" + name + " this.name=" + this.name + " " + this.toString()); return name; } public synchronized void setName(String name) { this.name = name; System.out.println("setName:" + Thread.currentThread().getName() + " name=" + name + " this.name=" + this.name + " " + this.toString()); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } }
此实例就通过ThreadLocal这个对象来达到MyThreadScopeData 实例对象在当前线程范围内(这里是Module A和Module B)共享同一个对象。并且通过单例的模式,很好的屏蔽了ThreadLocal对外部模块的可见性。
Set(T)的源代码如下:
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); }
把要保存的对象保存到ThreadLocalMap这个对象中,并且以ThreadLocal本身作为key,如果此Map一开始不存在,就去初始化一个Map,然后保存值Value。
发表评论
-
eclipse project .setting
2016-08-24 11:30 562有一个文件在.setting的目录下面: 文件名:org.ec ... -
jar命令工具
2016-01-23 20:29 607背景: 今天介绍两个jar的命令工具,对我个人来说,还是比较好 ... -
Java的按值传递
2016-01-23 19:30 504问题: 最近在看Mar ... -
Mac OS 安装java 开发环境
2016-01-03 13:00 1735我的机器是: 1. jdk1.7下载安装 jdk7:h ... -
记一次Java Rest Service Hang住的经历
2015-12-28 20:08 2646背景: 在前后端分开开发的过程中,前段的页面要调用后台Java ... -
一个String字符串的问题2
2015-12-14 14:22 562背景: 今天遇到个问题: String str = & ... -
我读重构这本书
2015-12-01 22:30 0第一点:关注变量命名。好的变量名能让读者更快更好的理解程序到底 ... -
系统log的编写
2015-11-16 09:41 0log很关键,一定要记录好对追踪问题有帮助的日志。 -
CAS 授权问题
2015-11-16 09:40 0CAS 授权问题 -
Caused by: java.lang.UnsupportedOperationException 解决方案
2015-10-21 22:09 3997背景: 今天在跑一个UnitTest,跑的过程中想在list ... -
LogBack 框架里log-access的使用
2015-10-18 16:05 7002背景: 想通过配置log-access来实现直接使用浏览器来访 ... -
how to fix "org.hamcrest.CoreMatchers.containsString cannot be resolved"
2015-09-23 23:12 2968背景: 山姆大叔比较喜欢用一些新的技术和新的特性,最近在jun ... -
java 打印金字塔
2015-08-24 00:53 732背景: 一个同事,面试应聘者喜欢用学校里学过的一个书本或者课后 ... -
纯jsp servlet 实现 upload file功能
2015-08-17 20:35 682本篇主要是简单的实现jsp servlet 的上传文件的功能, ... -
dos 命令窗口執行java 命令,帶包路徑
2015-07-26 12:16 506記錄一下,是為了自己下次再run java命令的時候,可以很快 ... -
tomcat 远程调试
2015-07-23 18:41 446背景: 我们在项目开发过程中,很多时候会遇到这样的情况:项目在 ... -
使用android studio 来开发hello world app的时候,遇到的一些坑。
2015-07-13 01:38 2092使用android studio 来开发h ... -
ThreadLocal
2015-05-11 07:22 370Java线程:深入ThreadLocal ThreadLo ... -
Hibernate Interceptor(拦截器)
2015-04-28 20:30 2341需求: 对所有操作数据库的事件,添加audit log, 此l ... -
eclipse 加入tomcat 包
2015-03-24 01:09 395...
相关推荐
JDBC事务的封装和Threadlocal实例,参考博客:http://blog.csdn.net/daijin888888/article/details/50988053
主要介绍了java 中ThreadLocal实例分析的相关资料,需要的朋友可以参考下
虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程却只能访问到自己通过调用ThreadLocal的set()方法设置的值。即使是两个不同的线程在同一个ThreadLocal对象上设置了不同的值,他们仍然无法访问到对方的值...
java 简单的ThreadLocal示例
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
问题背景在 Tomcat 中,下面的代码都在 webapp 内,会导致 WebappClassLoaderWebappClassLoader 泄漏,无法被回收。
主要介绍了Java ThreadLocal用法,结合实例形式详细分析了ThreadLocal线程局部变量相关原理、定义与使用方法,需要的朋友可以参考下
主要介绍ThreadLocal的原理,实例分析以及注意事项
no7_threadlocal ThreadLocal实例及源码解析 no8_volatile volatile实例 no9_daemon_thread 守护线程实例 no10_threadgroup 线程组 no11_thread_catch_exception 指定异常捕获类捕获线程中的异常 no12_...
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
ThreadLocalMap是ThreadLocal类中的内部类,实例却被Thread类持有,相当于每个线程持有一个map
主要介绍了Java 并发编程之ThreadLocal详解及实例的相关资料,需要的朋友可以参考下
主要介绍了Android 中 ThreadLocal使用示例的相关资料,这里提供示例代码帮助大家学习理解这部分内容,需要的朋友可以参考下
一篇文章我们来分析一个Java中ThreadLocal内存泄露的案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。
主要介绍了实例讲解Java并发编程之ThreadLocal类,本文给出了模拟ThreadLocal、实用ThreadLocal等代码实例,需要的朋友可以参考下
主要介绍了JAVA开发常用类库UUID、Optional、ThreadLocal、TimerTask、Base64使用方法与实例详解,需要的朋友可以参考下
主要介绍了java 中ThreadLocal 的正确用法的相关资料,需要的朋友可以参考下
主要介绍了深入理解ThreadLocal工作原理及使用示例,涉及ThreadLocal<T> 简介和使用示例及ThreadLocal的原理等相关内容,具有一定参考价值,需要的朋友可以了解下。
synchronized关键字不属于方法特征签名的一部分,所以可以在覆盖方法的时候加上去。也就是说,在父类的方法声明上可以没有synchronized关键字,而在子类覆盖...那么当使用这个类的实例调用f()时,就不能再调用g()方法。
主要介绍了Java多线程编程之ThreadLocal线程范围内的共享变量,本文讲解了ThreadLocal的作用和目的、ThreadLocal的应用场景、ThreadLocal的使用实例等,需要的朋友可以参考下