java并发编程实践 ThreadLocal
2012-07-27 11:32
603 查看
ThreadLocal 的功能,能够为各个访问的线程copy出初始化后的资源副本,因此各个访问资源的线程在改变资源状态的时候,只是改变分配给该线程副本的状态,因此各个线程之间没有干扰,可以按照各自设定的序列执行。
对比代码如下:
UniqueInt与iTest分别为两个Integer类型的数据。UniqueInt应用了ThreadLocal。
线程T1与T2分别进行-1与+2操作。
如果没有应用ThreadLocal的iTest会因为两个线层都在访问,打印出可不预测的结果,而uniqueInt则在各自的线程中按照-1与+2的操作打印。
打印结果如下:
对比代码如下:
UniqueInt与iTest分别为两个Integer类型的数据。UniqueInt应用了ThreadLocal。
线程T1与T2分别进行-1与+2操作。
如果没有应用ThreadLocal的iTest会因为两个线层都在访问,打印出可不预测的结果,而uniqueInt则在各自的线程中按照-1与+2的操作打印。
package ThreadLocal; public class TestThreadLocal { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new TestThreadLocal().test1(); } public void test1() { T1 t11 = new T1(); // T1 t12 = new T1(); T2 t21 = new T2(); // T2 t22 = new T2(); t11.start(); // t12.start(); t21.start(); // t22.start(); } //ThreadLocal private final ThreadLocal<Integer> uniqueInt = new ThreadLocal<Integer>() { @Override protected Integer initialValue() { return new Integer(0); } }; //对比数据 private Integer itest = new Integer(0); /** * 对全局变量进行-1操作。 * @author * */ class T1 extends Thread { public void run() { // TODO Auto-generated method stub for(int i=0 ; i < 10; i++) { uniqueInt.set(uniqueInt.get()-1); itest = itest-1; System.out.println(Thread.currentThread().getName()+"T1 uInt :" + uniqueInt.get()); System.out.println(Thread.currentThread().getName()+"T1 itest:" + itest); } } } /** * 对全局变量进行+2操作。 * @author * */ class T2 extends Thread { public void run() { // TODO Auto-generated method stub for(int i=0 ; i < 10; i++) { uniqueInt.set((uniqueInt.get().intValue())+2); itest=itest+2; System.out.println(Thread.currentThread().getName()+"T2 uInt:" + uniqueInt.get()); System.out.println(Thread.currentThread().getName()+"T2 itest:" + itest); } } } }
打印结果如下:
Thread-1T2 uInt:2 Thread-0T1 uInt :-1 Thread-1T2 itest:1 Thread-0T1 itest:1 Thread-1T2 uInt:4 Thread-0T1 uInt :-2 Thread-1T2 itest:2 Thread-0T1 itest:2 Thread-1T2 uInt:6 Thread-0T1 uInt :-3 Thread-1T2 itest:3 Thread-0T1 itest:3 Thread-1T2 uInt:8 Thread-0T1 uInt :-4 Thread-1T2 itest:4 Thread-0T1 itest:4 Thread-1T2 uInt:10 Thread-0T1 uInt :-5 Thread-1T2 itest:5 Thread-0T1 itest:5 Thread-1T2 uInt:12 Thread-0T1 uInt :-6 Thread-1T2 itest:6 Thread-0T1 itest:6 Thread-1T2 uInt:14 Thread-0T1 uInt :-7 Thread-1T2 itest:7 Thread-0T1 itest:7 Thread-1T2 uInt:16 Thread-0T1 uInt :-8 Thread-1T2 itest:8 Thread-0T1 itest:8 Thread-1T2 uInt:18 Thread-0T1 uInt :-9 Thread-1T2 itest:9 Thread-0T1 itest:9 Thread-1T2 uInt:20 Thread-0T1 uInt :-10 Thread-1T2 itest:10 Thread-0T1 itest:10
相关文章推荐
- 【Java并发编程实践】— ThreadLocal分析
- 【Java并发编程实践】— ThreadLocal分析
- Java并发编程实践笔记之—发布和逸出(Publication and Escape)
- [Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合
- Java并发编程:深入剖析ThreadLocal
- Java并发编程实践笔记
- Java多线程和并发编程实践的学习心得----基础篇
- JAVA并发编程实践- 线程的优点
- Java多线程和并发编程实践的学习心得----基础篇3
- Java并发编程实践阅读笔记
- [Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合
- 编程实践笔记{Java 线程 并发处理 Webservice}
- 编程实践笔记{Java 线程 并发处理 Webservice}(转)
- Java并发编程:深入剖析ThreadLocal
- java并发编程实践 part 01 --> 线程创建方式
- Java并发编程:深入剖析ThreadLocal
- java多线程与并发之java并发编程实践(九)
- java并发编程实践 笔记(1)
- java并发编程学习: ThreadLocal使用及原理
- 第一章 Java 并发编程实践基础