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. 如何修复损坏的MySQL数据表

    id=164 由于断电或非正常关机而导致MySQL数据库出现错误是非常常见的问题.有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用M ...

  2. zabbix监控phpfpm

    php-fpm status详解 pool – fpm池子名称,大多数为wwwprocess manager – 进程管理方式,值:static, dynamic or ondemand. dynam ...

  3. Hibernate解决n+1问题

    观点:对于n+1问题的理解. 一般而言说n+1意思是,无论在一对多还是多对一当查询出n条数据之后,每条数据会关联的查询1次他的关联对象,这就叫做n+1. 但是我的理解是,本来所有信息可以一次性查询出来 ...

  4. 执行maven-build.cmd失败

    执行maven-build.cmd失败,显示:"Non-resolvable parent POM: Could not transfer artifact ......",如截图 ...

  5. git修改文件名大小写的方法。

    首先,在git命令行里面运行: git config core.ignorecase false 此命令是全局设置,以后在此机子上clone出来的git仓库工程都沿用此设置.当然,以前就已经clone ...

  6. C#:文件、路径(Path_File)

    public class Path_File { public string AppPath { get { return AppDomain.CurrentDomain.BaseDirectory; ...

  7. C#:只运行一个程序

    一.通过系统事件 1.实现如下: using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  8. [转]在iOS项目中使用CorePlot框架

    转载地址:http://blog.csdn.net/llfjfz/article/details/7849190#comments Core Plot是OS X和IOS下的一个开源图形库,它提供数据的 ...

  9. WebView的返回功能

    WebView 实现返回到最后一个 在退出 import android.app.Activity; import android.os.Bundle; import android.view.Key ...

  10. sql查询某条记录

    select * from (SELECT t.*,ROWNUM AS RN FROM AWARDISSUE_FOOTBALL t ORDER BY ID DESC) WHERE RN=2