多线程映射工具——线程当地值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程映射工具——线程当地值相关的知识,希望对你有一定的参考价值。

ThreadLocal相当于一个Map<Thread, T>,各线程使用自己的线程对象Thread.currentThread()作为键存取数据,但ThreadLocal实际上是一个包装了这个Map,并且线程只能存取自己的数据,不能操作其它线程的数据。

  • T get()
  • set(T)
  • remove()

代码示例:

public static void main(String[] args) {
    String[] names = new String[]{"A", "B", "C", "D", "E"};
    for(int i=0; i<names.length; i++){
        final String myName = names[i];
        new Thread(){
            public void run(){
                name.set(myName);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                test();
            }
        }.start();
    }
    
    /*
        运行结果:
        Thread-0 -> 我的名字叫A
        Thread-2 -> 我的名字叫C
        Thread-1 -> 我的名字叫B
        Thread-3 -> 我的名字叫D
        Thread-4 -> 我的名字叫E
     */
}

private static ThreadLocal<String> name = new ThreadLocal<String>();

public static void test(){
    System.out.println(Thread.currentThread().getName() + " -> 我的名字叫" + name.get());
}

 

以上是关于多线程映射工具——线程当地值的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程与并发库高级应用-工具类介绍

多线程 Thread 线程同步 synchronized

自己开发的在线视频下载工具,基于Java多线程

硬核!管理mysql数据库的工具

多个请求是多线程吗

多个用户访问同一段代码