標籤:安全執行緒 並發 java 多線程
內容來自,張孝祥老師的張孝祥-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的構造方法,只提供一個靜態Factory 方法,此方法返回與當前線程有關的當前類的執行個體對象。}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到的即使當前線程綁定的執行個體。
Java多線程與並發應用-(5)-如何優雅的使用ThreadLocal類