內容來自,張孝祥老師的張孝祥-Java多線程與併發庫高級應用》視頻教程
package com.lipeng;
public class MyThreadLocalTest2 {
private final static MyThreadLocal<String> myThreadLocal=new MyThreadLocal<String>();
/**
* @param args
*/
public static void main(String[] args) {
new Thread(){
public void run() {
ThreadLocalData.getThreadLocalData().setAge(12);
ThreadLocalData.getThreadLocalData().setName("張三");
System.out.println(Thread.currentThread().getName()+"----------------"+A.getName());
System.out.println(Thread.currentThread().getName()+"----------------"+B.getName());
};
}.start();
new Thread(){
public void run() {
ThreadLocalData.getThreadLocalData().setAge(18);
ThreadLocalData.getThreadLocalData().setName("李四");
System.out.println(Thread.currentThread().getName()+"----------------"+A.getName());
System.out.println(Thread.currentThread().getName()+"----------------"+B.getName());
};
}.start();
}
static class A
{
public static String getName()
{
return ThreadLocalData.getThreadLocalData().getName();
}
public static void setName(String name)
{
myThreadLocal.set(name);
}
}
static class B
{
public static String getName()
{
return ThreadLocalData.getThreadLocalData().getName();
}
public static void setName(String name)
{
myThreadLocal.set(name);
}
}
}
class ThreadLocalData
{
private static ThreadLocal<ThreadLocalData> threadLocal=new ThreadLocal<ThreadLocalData>();
private String name;
private int age;
private ThreadLocalData(){ //不提供public的構造方法,只提供一個靜態工廠方法,此方法返回與當前線程有關的當前類的實例對象。
}
public static ThreadLocalData getThreadLocalData()
{
ThreadLocalData threadLocalData=threadLocal.get();
if(threadLocalData==null)
{
threadLocalData=new ThreadLocalData();
threadLocal.set(threadLocalData);
}
return threadLocalData;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
<span style="white-space:pre"> </span>我們在獲取一個與線程綁定的對象時,不希望看到ThreadLocal,而是直接得到與當前線程綁定的對象,在這裏,將線程綁定的類的構造方法private,提供一個靜態方法,使得要獲得這個類的對象,必須通過這個方法,而這個方法是從ThradLocal中get到的即使當前線程綁定的實例。