zoukankan      html  css  js  c++  java
  • Java多线程ThreadLocal介绍

    在Java多线程环境下ThreadLocal就像一家银行,每个线程就是银行里面的一个客户,每个客户独有一个保险箱来存放金钱,客户之间的金钱不影响。

    private static ThreadLocal threadLocal = new ThreadLocal(); //一个ThreadLocal通常被声明为private static,static代表它是多线程共享的
    • 每个线程都可以通过调用threadLocal.set()方法来设置自己独有的threadLocal值
    • 每个线程都可以通过调用threadLocal.get()方法来设置自己独有的threadLocal值

    注意:哪个线程调用threadLocal就输出哪个线程自身的存储空间里面的值(下面MyRun构造器)

    public class ThreadLocalTest {
        private static ThreadLocal threadLocal = new ThreadLocal(); //一个ThreadLocal通常被声明为private static,static代表它是多线程共享的
    
        public static void main(String[] args) {
            threadLocal.set(200);   //设置本线程的值
            System.out.println(Thread.currentThread().getName()+"线程的threadLocal的值:"+threadLocal.get());  //哪个线程调用threadLocal的方法就调出哪个线程的本地存储
            new Thread(new MyRun()).start();
        }
    
        static class MyRun implements Runnable{
            public MyRun(){
                threadLocal.set(400);   //上下文还是main,即当前线程还是main线程
                System.out.println(Thread.currentThread().getName()+"线程的threadLocal的值:"+threadLocal.get());  //哪个线程调用threadLocal的方法就调出哪个线程的本地存储
            }
            @Override
            public void run() {
                threadLocal.set(Math.random());   //设置本线程的值
                System.out.println(Thread.currentThread().getName()+"线程的threadLocal的值:"+threadLocal.get());  //哪个线程调用threadLocal的方法就调出哪个线程的本地存储
            }
        }
    }

    ThreadLocal的子类为InheritableThreadLocal,InheritableThreadLocal和ThreadLocal最大的区别在于在一个线程中创建一个子线程时子线程的ThreadLocal会继承父线程的ThreadLocal。

  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/chiweiming/p/11204004.html
Copyright © 2011-2022 走看看