9.并发编程--ThreadLocal

并发编程--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     }

 

posted @ 2018-11-20 14:52  花神47699  阅读(143)  评论(0编辑  收藏  举报