ThreadLocal概念:线程局部变量,是一种多线程并发访问变量的解决方案。与其synchronized等加锁方式不同,ThreadLocal完全不提供锁,而是用以空间换时间的手段,为每个线程提供变量独立的副本,以保证线程安全。从性能上来说,ThreadLocal不具有绝对优势,在并发不是很高的时候,加锁的性能会更好,但是作为一套与所完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景,使用ThreadLocal可以在一定程度上减少竞争。
1 package com.java.day02_threadlocal; 2 3 public class ConnThreadLocal { 4 private static ThreadLocal<String>th = new ThreadLocal<String>(); 5 6 public void setTh(String value){ 7 th.set(value); 8 } 9 10 public void getTh(){ 11 System.out.println(Thread.currentThread().getName()+":"+this.th.get()); 12 } 13 14 public static void main(String[] args) { 15 final ConnThreadLocal tl = new ConnThreadLocal(); 16 17 Thread t1 = new Thread(new Runnable() { 18 public void run() { 19 tl.setTh("nanami"); 20 tl.getTh(); 21 } 22 },"t1"); 23 24 25 Thread t2 = new Thread(new Runnable() { 26 public void run() { 27 try { 28 Thread.sleep(500); 29 tl.getTh(); 30 } catch (InterruptedException e) { 31 e.printStackTrace(); 32 } 33 } 34 },"t2"); 35 36 37 t1.start(); 38 t2.start(); 39 40 } 41 42 }
运行结果:
1 t1:nanami 2 t2:null