zoukankan      html  css  js  c++  java
  • 关于 ThreadLocal 你需要知道的几点

    一、ThreadLocal是什么?

    • 一个类对象类型,提供属线程本地变量,也就是同一个变量对不同线程保存了不同的值,但是和线程自身定义的自属变量不同

    • 通常以私有静态类型定义,用以保存特定线程特定状态属性。

    • 线程存活期间保持对ThreadLocal的弱引用,线程结束后,则变量会被垃圾回收器回收。

    二、ThreadLocal使用

    //定义一个ThreadLocal变量用以存储不同线程的ID
    ThreadLocal<Long> localVs = new ThreadLocal<>();
    //线程list
    List<Thread> threads = new ArrayList<>();
    //初始化线程
    IntStream.range(0, 5).forEach(value -> {
        Thread tmp = new Thread(() -> {
            //线程运行时(线程运行期间),将ID放入变量
            localVs.set(Thread.currentThread().getId());
            //输出当前线程名称,ID
            System.out.println(Thread.currentThread().getName() + ": " + Thread.currentThread().getId());
    
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //延迟3s,输出当前线程名称,所属ThreadLocal变量
            System.out.println(Thread.currentThread().getName() + ": " + localVs.get());
        });
        threads.add(tmp);
    });
    
    for (Thread thread : threads) {
        thread.start();
    }

    输出:

    Thread-0: 12
    Thread-2: 14
    Thread-1: 13
    Thread-4: 16
    Thread-3: 15
    Disconnected from the target VM, address: '127.0.0.1:59273', transport: 'socket'
    Thread-1: 13
    Thread-0: 12
    Thread-2: 14
    Thread-4: 16
    Thread-3: 15

    三、ThreadLocal需要注意的地方

    线程中使用ThreadLocal类型变量,在线程声明周期结束前调用ThreadLocal::remove()方法,清除对应本线程的变量内存占用,避免内存泄漏。

  • 相关阅读:
    tips
    数学建模-预测模型优缺(搬运)
    数学建模-灰色预测模型GM(1,1)_MATLAB
    Floyd算法_MATLAB
    第二章 运算方法与运算器(浮点数的加减法,IEEE754标准32/64浮点规格化数)
    面向对象
    for循环
    if---else
    airflow的web任务管理
    airflow原理
  • 原文地址:https://www.cnblogs.com/niejunlei/p/12729035.html
Copyright © 2011-2022 走看看