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。

  • 相关阅读:
    MD5加密
    HDU 1800 Flying to the Mars(Trie字典树 upper_bound)
    POJ 3624 Charm Bracelet(01背包 基础)
    hdu 1005 (规律 循环节)
    ZOJ 3710 friends(暴力 枚举 水)
    zoj 3714 Java Beans(枚举 水)
    hdu 1108 最小公倍数(数论基础 水)
    POJ 1797 Heavy Transportation(dijkstra )
    poj 3984 迷宫问题(bfs 打印路径)
    报数游戏(模拟 枚举)
  • 原文地址:https://www.cnblogs.com/chiweiming/p/11204004.html
Copyright © 2011-2022 走看看