ThreadLocal概念:线程局部变量,是一种多线程间并发访问量的解决方案,与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立剧本,有保障线程安全。
从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使用ThreadLocal可以在一定程度上减少锁竞争。
示例:
package edu.sdut.queue;
/** * * 每一个线程都会对应一个ThreadLocal * @author Vision_TXG * */ public class TestThreadLocal { public static ThreadLocal<String> th = new ThreadLocal<String>(); public void setTh(String value) { th.set(value); } public void getTh() { System.out.println(Thread.currentThread().getName()+": " + this.th.get()); } public static void main(String[] args) { final TestThreadLocal tl = new TestThreadLocal(); Thread t1 = new Thread(new Runnable() {
@Override public void run() { // TODO Auto-generated method stub tl.setTh("Tom"); tl.getTh(); } },"t1"); Thread t2 = new Thread(new Runnable() {
@Override public void run() { // TODO Auto-generated method stub try { Thread.sleep(1000); tl.getTh(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } },"t2"); t1.start(); t2.start(); } }
|
运行结果: t1: Tom t2: null |