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