package com.dudy.learn01.base.juc; /** * Created by dudy on 2017/3/9. * * 4. ThreadLocal 这个类实现原理和用途,在哪里用到了 * 每个ThreadLocal可以放一个线程级别的变量,但是它本身可以被多个线程共享变量,而且又可以达到线程安全的目的,且绝对线程安全 * spring的事物管理Session, 连接池管理 Connection * https://my.oschina.net/huangyong/blog/159725 * 数据库事物的前提是: 必须是同一个连接 */ public class ThreadLocalTest { static class Resource{ public static final ThreadLocal RESOURCE1 = new ThreadLocal(); public static final ThreadLocal RESOURCE2 = new ThreadLocal(); } static class A { public void setOne(String str){ Resource.RESOURCE1.set(str); } public void setTwo(String str){ Resource.RESOURCE2.set(str); } } static class B { public void display(){ System.out.println(Resource.RESOURCE1.get() +":" + Resource.RESOURCE2.get()); } } public static void main(String[] args) { final A a = new A(); final B b = new B(); for (int i = 0; i< 5 ;i++){ final String resource1 = "Thread_" + i; final String resource2 = "value " + i; new Thread(new Runnable() { @Override public void run() { try { a.setOne(resource1); a.setTwo(resource2); b.display(); }finally { Resource.RESOURCE2.remove(); Resource.RESOURCE1.remove(); } } }).start(); } } }