一个例子理解threadLocal用法
2015-03-12 22:33
281 查看
ThreadLocal可以使对象达到线程隔离的目的。话不多说直接上代码:
打印结果:
threadLocal:str = a
str = a
threadLocal:str = a
str = a
threadLocal:str = null
str = a
Test类中,mail线程设置SingleThreadLocalTest中ThreadLocal的值,然后打印ThreadLocal的值,new MyThread().run()只是执行run()方法,执行的线程还是main线程,所以打印结果一样;new MyThread().start()是新启动一个线程,新的线程中没有设置ThreadLocal的值,所以打印结果为null。所以ThreadLocal达到了线程间隔离的目的。
/** * 一个例子理解threadLocal * * 一个单例模式的类 */ public class SingleThreadLocalTest { private static SingleThreadLocalTest single = new SingleThreadLocalTest(); private ThreadLocal<String> threadLocal = new ThreadLocal<String>(); private String str;// 用于threadLocal对比 /** * 单例,保证对象只会被创建一次 */ private SingleThreadLocalTest() { } public static SingleThreadLocalTest getInstance() { return single; } public void setStr(String str) { this.threadLocal.set(str);// 设置threadLocal的变量 this.str = str;// 设置全局变量 } public void printStr() { System.out.println("threadLocal:str = " + this.threadLocal.get()); System.out.println("str = " + str); } }
public class Test { public static void main(String[] args) { SingleThreadLocalTest.getInstance().setStr("a"); SingleThreadLocalTest.getInstance().printStr(); new MyThread().run(); new MyThread().start(); } } class MyThread extends Thread { public void run() { SingleThreadLocalTest.getInstance().printStr(); } }
打印结果:
threadLocal:str = a
str = a
threadLocal:str = a
str = a
threadLocal:str = null
str = a
Test类中,mail线程设置SingleThreadLocalTest中ThreadLocal的值,然后打印ThreadLocal的值,new MyThread().run()只是执行run()方法,执行的线程还是main线程,所以打印结果一样;new MyThread().start()是新启动一个线程,新的线程中没有设置ThreadLocal的值,所以打印结果为null。所以ThreadLocal达到了线程间隔离的目的。
相关文章推荐
- 自己为了理解Functor写的一个例子
- JSP-一个理解MVC架构的简单的登陆、注册例子
- 一个理解wait()与notify()的例子
- 深入理解HTTP协议的一个java的例子
- 对Jena的简单理解和一个例子(下)
- 一个理解wait()与notify()的例子
- 一个理解wait()与notify()的例子
- 理解面向对象和面向过程区别的一个小例子。
- 通过一个Socket例子理解Http协议
- 理解委托的一个小例子
- 一个理解wait()与notify()的例子
- 一个理解wait()与notify()的例子
- 对Jena的简单理解和一个例子
- Zend Cache 用法的一个例子.
- 理解C语言声明的优先级规则(一个复杂的例子)
- 一个理解wait()与notify()的例子
- 一个理解wait()与notify()的例子
- 从EntLib(1.0)的一个例子理解身份验证的三个概念。
- 对Jena的简单理解和一个例子(上)
- 一个理解wait()与notify()的例子