• ThreaLocal


    ThreadLocal概念:线程局部变量,是一种多线程间并发访问变量的解决方案。与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。

    从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全五官的线程安全解决方案,在高并发量或者竞争激烈的场景,使用ThreadLocal可以在一定程度上减少锁的竞争。

    同样,看一段小demo:

    public class ConnThreadLocal {
    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 ConnThreadLocal ct = new ConnThreadLocal();
    Thread t1 = new Thread(new Runnable() {
    @Override
    public void run() {
    ct.setTh("张三");
    ct.getTh();
    }
    }, "t1");
    Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    Thread.sleep(1000);
    ct.getTh();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }, "t2");
    t1.start();
    t2.start();
    }
    }

    这段代码的运行结果是:

    也就是说,每一个线程里面,都单独使用了ThreaLocal

    
    
  • 相关阅读:
    Netty回调与Channel执行流程分析
    Netty执行流程分析与重要组件介绍
    HBase 介绍
    Java文件上传下载原理
    ngxtop安装和使用
    开启Nginx监控 with-http_stub_status_module
    Spring 事务模板方法设计模式
    Spring 事务管理
    JdkDynamicAopProxy 拦截器链的获得与递归执行
    CgLib实现AOP
  • 原文地址:https://www.cnblogs.com/shmilyToHu/p/6398323.html
Copyright © 2020-2023  润新知