`
dingjob
  • 浏览: 181207 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA基础特性-ThreadLocal 应用

阅读更多
   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适,他实现了线程的变量隔离,不同的线程可以维护自己的变量,
他在内部实现原理上比较简单,就是每个ThreadLocal内定义一个以自己线程名称为key的hashMap,在应用上非常广泛,struts2等框架的每一个Action请求都会被Web容器初始化为一个ActionContext。这样就实现了不同请求的隔离。
    下面看一个Demo,通过Demo的演示大概就可以看到 ThreadLocal的应用。


主程序:
   /**
 * @author job
 *
 */
public class ThreadLocalTest {

	
	public static void main(String[] args) {
		ExecutorService service = Executors.newFixedThreadPool(2);
		service.execute(new Runnable(){
			public void run() {
				Mydata.getMydata().setX(new Random().nextInt());
				A.say();
			}
		});
		service.execute(new Runnable(){
			public void run() {
				Mydata.getMydata().setX(new Random().nextInt());
				B.say();
			}
		});
		service.shutdown();
	}

}


用作共享的参数类:


/**
 * @author dingjob
 *
 */
 class Mydata {
		private static ThreadLocal data = new ThreadLocal();
		// 防止对象 被new,只能通过get的方法获得。
		private Mydata(){
		}
		int x;
		public static Mydata getMydata(){	
			Mydata mydata = (Mydata)data.get();
			if(mydata ==null){
				mydata = new Mydata();
				data.set(mydata);
			}
			return mydata;
		}
		public int getX() {
			return x;
		}

		public void setX(int x) {
			this.x = x;
		}	
}


两个简单的service

class A {
	public static void say(){
		System.out.println(Thread.currentThread().getName()+ Mydata.getMydata().getX());
	}
}

/**
 * @author dingjob
 *
 */
 class B {
	 public static void say(){
			System.out.println(Thread.currentThread().getName()+ Mydata.getMydata().getX());
		}
}





输出结果如下:
引用

62481336
pool-1-thread-1 62481336
-1790656022
pool-1-thread-2 -1790656022


通过以上代码大概可以看到,A,B 两个线程实现了隔离,A打印出来的就是A线程初始化
的值。


顺便说一下:
上面的例子也用了下自己不太熟悉的1.5的多线程处理类。
同时在Mydata的实现了良好的封装。



ThreadLocal 可以用于session等的保存,有很广泛的用途。
0
0
分享到:
评论

相关推荐

    免费分享 Java面试笔记 面试八股文 计算机网络基础

    Java基础:Java概念、基础语法、面向对象的理解、String类、Object类、序列化、泛型、注解与反射、JDK1.8新特性等;Java集合:List底层实现、Map底层实现等;Java并发编程:ThreadLocal、Java内存模型、锁、并发工具...

    架构探险-从零开始写javaweb框架

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险 从零开始写Java Web框架.pdf

    为了使框架具备AOP特性,从代理技术讲到AOP技术,从ThreadLocal技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展Web服务插件与安全控制插件为例,教会...

    架构探险:从零开始写Java Web框架

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险――从零开始写Java Web框架_黄勇

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险——从零开始写Java Web框架 绝对完整!强烈推荐

    为了使框架具备AOP特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为例...

    架构探险:从零开始写JAVA_WEB框架

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险-----从零开始写javaweb框架.pdf

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险 从零开始写javaweb框架

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险——从零开始写Java Web框架高清带书签pdf

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    《架构探险 从零开始写javaweb框架》 源代码

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险 从零开始写javaweb框架 .pdf

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险 从零开始写JavaWeb框架

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险:从零开始写 JavaWeb 框架 高清版 pdf

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险 从零开始写javaweb框架 高清pdf 书签版

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。*后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    架构探险 原书源码

    为了使框架具备 AOP 特性,从代理技术讲到 AOP 技术,从 ThreadLocal 技术讲到事务控制技术。最后对框架进行优化与扩展,通过对现有框架的优化,使其可以提供更加完备的功能,并以扩展 Web 服务插件与安全控制插件为...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】java多态的理解 13 【基础】transient关键字 15 【基础】访问修饰符区别 15 【基础】java基本数据类型(四类八种) 15 Java自动类型转换 16 数据类型自动提升(注意以下讨论的是二元操作符) 16 【基础】...

Global site tag (gtag.js) - Google Analytics