package com.cn.gbx;

import java.util.Date;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask; public class TestThread {
static class A{
public void get() {
User user = User.getInstance();
System.out.println("A from " + Thread.currentThread().getName() + " get data:" + user.getName() + " : " + user.getPassword());
}
}
static class B{
public void get(){
User user = User.getInstance();
System.out.println("B from " + Thread.currentThread().getName() + " get data:" + user.getName() + " : " + user.getPassword());
}
}
public static void main(String[] args) {
for (int i = 0; i < 2; ++i) {
new Thread(
new Runnable() {
@Override
public void run() {
int data = new Random().nextInt();
System.out.println(Thread.currentThread().getName() + " : data = " + data);
User.getInstance().setName("name:" + data);
User.getInstance().setPassword("p:" + data);
new A().get();
new B().get();
//A,B 模块得到的都是与本线程相关联的数据, 例如数据库connection等等
}
}
).start();
}
}
} class User{ //类似单例的懒汉模式 其实ThreadLocal 就是一个Map只不过是自动将key设为本地线程
private static ThreadLocal<User> threadLocal = new ThreadLocal<User>();
private User() {}
public static User getInstance() {
User user = threadLocal.get();
if (user == null) {
user = new User();
threadLocal.set(user);
}
return user;
} private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
输出: Thread-1 : data = 1362065454
Thread-0 : data = 1208952694
A from Thread-0 get data:name:1208952694 : p:1208952694
A from Thread-1 get data:name:1362065454 : p:1362065454
B from Thread-1 get data:name:1362065454 : p:1362065454
B from Thread-0 get data:name:1208952694 : p:1208952694

  

ThreadLocal 实现线程内共享变量的更多相关文章

  1. Java多线程——线程范围内共享变量和ThreadLocal

    多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. package java_ ...

  2. Java多线程——线程范围内共享变量

    多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. package java_ ...

  3. ThreadLocal实现线程范围的共享变量

    一.如何理解线程范围内共享数据 1.static int num=0; 2.线程1访问num变量,并设置为num=2:线程2访问num变量,并设置为num=3: 3.当线程1中对象A.B.C 在访问线 ...

  4. JAVA 并发编程-线程范围内共享变量(五)

    线程范围内共享变量要实现的效果为: 多个对象间共享同一线程内的变量 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsi ...

  5. 并发库应用之一 & ThreadLocal实现线程范围的共享变量

    ThreadLocal用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据. 每个线程调用全局ThreadLocal对象的 ...

  6. 多线程篇四:ThreadLocal实现线程范围内变量共享

    1.static实现线程范围内变量共享 package com.test.shareData; import java.util.Random; /** * 多线程范围内的数据共享 * @author ...

  7. ThreadLocal解决线程安全问题

    一.线程安全问题产生的原因 线程安全问题都是由全局变量及静态变量引起的 二.线程安全问题 SimpleDateFormate sdf = new SimpleDateFormat();使用sdf.pa ...

  8. ThreadLocal本地线程变量的理解

     一般的Web应用划分为展现层.服务层和持久层三个层次,在不同的层中编写对应的逻辑,下层通过接口向上层开放功能调用.在一般情况下,从接收请求到返回响应所经过的所有程序调用都同属于一个线程.       ...

  9. ThreadLocal(线程本地存储)

    1. ThreadLocal,即线程本地变量或线程本地存储. threadlocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的 ...

随机推荐

  1. Linux/Unix中的#!和!#

    是不是在Terminal输入命令的时候,输入了很长的一个路径,然后发现还有在同一条命令中再输一次的时候很恼火,其实Shell是提供了trick的,就是使用!#(和#!不同哦) 习惯写脚本的猿,通常对于 ...

  2. 分析Linux内核创建一个新进程的过程【转】

    转自:http://www.cnblogs.com/MarkWoo/p/4420588.html 前言说明 本篇为网易云课堂Linux内核分析课程的第六周作业,本次作业我们将具体来分析fork系统调用 ...

  3. linux下对sh文件的操作

    1.创建test.sh文件 touch test.sh 2.编辑sh文件 vi test.sh(i:插入 | esc:退出insert模式 | wq+回车:退出) 3.保存退出 敲击esc, 然后输入 ...

  4. Effective C++:条款27——条款

    条款27:尽量少做转型动作 单一对象可能拥有一个以上的地址!

  5. 类型引起的bug

    1.当类型是整型时 $type = 12; 2.当类型是字符型 $type = '12';

  6. EF 用CallContext上下文管理

    public class ObjectContextFactory { private static CIK_NewsEntities context; public static DbContext ...

  7. 山东理工大学第七届ACM校赛-飞花的鱼塘 分类: 比赛 2015-06-26 10:30 43人阅读 评论(0) 收藏

    飞花的鱼塘 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 一日,飞花壕在稷下湖游玩,忽然,飞花巨有了一个养鱼的想法,于是,他大手 ...

  8. Auty自动化测试框架第一篇——生成执行列表

    [本文出自天外归云的博客园] 在Auty的scripts文件夹中编写一个create_selection.py文件,用于在同级目录下针对同级目录scripts下的所有脚本生成一个selection.t ...

  9. Android Https

    /** * HttpUrlConnection支持所有Https免验证,不建议使用 * * @throws KeyManagementException * @throws NoSuchAlgorit ...

  10. spark资料

    http://spark.apache.org/docs/latest/programming-guide.html#rdd-operations http://m.blog.csdn.net/art ...