ThreadLocal类及应用技巧
来源:互联网 发布:乒乓球成品拍 知乎 编辑:程序博客网 时间:2024/05/16 16:55
一、基本类型变量共享
package com.test;import java.util.Random;/** * * @author * ThreadLocal:实现线程范围内单个变量共享,一个ThreadLocal对象代表一个变量,故其中只能放一个数据。 * ThreadLocal并不是一个Thread,而是Thread的局部变量,其本质也是通过内部定义的Map实现线程范围内的共享变量的。 */public class ThreadLocal_07 { //定义静态变量ThreadLocalMap,key为当前线程,value为当前线程所拥有的变量 private static ThreadLocal<Integer> threadLocal=new ThreadLocal<Integer>();public static void main(String[] args) {for(int i=0;i<2;i++){//启动两个线程new Thread(new Runnable() {@Overridepublic void run() {int data=new Random().nextInt();//放入数据System.out.println(Thread.currentThread().getName()+" has putted data:"+data);//保存当前线程所拥有的信息threadLocal.set(data);new A().get();new B().get();}}).start();}}static class A{public void get(){System.out.println("A from "+Thread.currentThread().getName()+" get data:"+threadLocal.get());}}static class B{public void get(){System.out.println("B from "+Thread.currentThread().getName()+" get data:"+threadLocal.get());}}}二、对象类型变量共享
package com.test;import java.util.Random;/** * * @author * ThreadLocal:实现线程范围内对象变量共享
案例中将涉及了单例模式,并且也没有使用常规的对象共享方式,而是将ThreadLocal封装到了对象内部 */public class ThreadLocal_08 { public static void main(String[] args) {for(int i=0;i<2;i++){//启动两个线程new Thread(new Runnable() {@Overridepublic void run() {int data=new Random().nextInt();ThreadObject.getInstance().setAge(data);ThreadObject.getInstance().setName("张三");new A().get();new B().get();}}).start();}}static class A{public void get(){//取得当前线程的对象实例ThreadObject threadObject=ThreadObject.getInstance();System.out.println("A from "+Thread.currentThread().getName()+" get data:" +"name-->"+threadObject.getName()+",age-->"+threadObject.getAge());}}static class B{public void get(){//取得当前线程的对象实例ThreadObject threadObject=ThreadObject.getInstance();System.out.println("B from "+Thread.currentThread().getName()+" get data:" +"name-->"+threadObject.getName()+",age-->"+threadObject.getAge());}}}/** * * @author * 单例模式:饥汉模式 */class ThreadObject{private String name;private Integer age;//将ThreadLocal封装在对象内部,每次获取该线程下对应的对象变量private static ThreadLocal<ThreadObject> map=new ThreadLocal<ThreadObject>();private ThreadObject(){}//单例模式/** * 多线程环境下,使用synchronized保证线程同步 * @return */public static synchronized ThreadObject getInstance(){ThreadObject threadObject=map.get();if(threadObject==null){threadObject=new ThreadObject();map.set(threadObject);}return threadObject;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
0 0
- ThreadLocal类及应用技巧
- ThreadLocal类及应用技巧
- 多线程06_张孝祥-ThreadLocal类及应用技巧
- 【张孝祥并发课程笔记】05:ThreadLocal类及应用技巧
- ThreadLocal类以及应用技巧
- ThreadLocal类及使用技巧
- 【java并发】ThreadLocal类以及应用技巧
- (5)ThreadLocal类及应用技巧---- 线程范围内共享变量
- (5)ThreadLocal类及应用技巧---- 线程范围内共享变量
- 【Java多线程与并发库】6.ThreadLocal类及应用技巧
- 【Java多线程与并发库】6.ThreadLocal类及应用技巧
- ThreadLocal原理及应用
- ThreadLocal 的应用及原理
- ThreadLocal类应用
- threadlocal原理及常用应用场景
- ThreadLocal及在Android中的应用
- ThreadLocal内部实现及应用场景
- threadlocal原理及常用应用场景1
- 有关类static初始化顺序
- vs2010下C++调用lib或dll文件
- 黑马程序员——Java开发前奏
- 《Unix环境高级编程》学习之编写守护进程
- Lumia Nokia Care Suite 刷机教程
- ThreadLocal类及应用技巧
- 一些安卓开源框架整理
- 有关Genymotion与eclipse的连接其他方法
- Android基础学习笔记:Activity的四种LaunchMode
- 【POJ1517】:u Calculate e
- CF Round#324 (Div2) E. Anton and Ira
- List遍历的四种方法
- 在网页中引入百度地图
- 【打CF,学算法——二星级】Codeforces 584C Marina and Vasya (简单构造)