zoukankan      html  css  js  c++  java
  • ThreadLocal

    简介

    让每个线程都拥有自己的专属本地变量

    示例

    package thread;
    
    import java.text.SimpleDateFormat;
    import java.util.Random;
    
    public class ThreadLocalExample implements Runnable{
        private static final ThreadLocal<SimpleDateFormat> formatter = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMdd HHmm"));
    
        @Override
        public void run() {
            System.out.println("Thread Name:" + Thread.currentThread().getName() + ", default Formatter:" + formatter.get().toPattern());
            try {
                Thread.sleep(new Random().nextInt(1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            formatter.set(new SimpleDateFormat("yy MM dd"));
            System.out.println("Thread Name:" + Thread.currentThread().getName() + ", default Formatter:" + formatter.get().toPattern());
        }
    
        public static void main(String[] args) {
            ThreadLocalExample threadLocalExample = new ThreadLocalExample();
            for (int i = 0; i < 10; ++i) {
                Thread thread = new Thread(threadLocalExample, "" + i);
                try {
                    int tmp = new Random().nextInt(1000);
                    Thread.sleep(tmp);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                thread.start();
            }
        }
    }

    运行

    Thread Name:0, default Formatter:yyyyMMdd HHmm
    Thread Name:1, default Formatter:yyyyMMdd HHmm
    Thread Name:2, default Formatter:yyyyMMdd HHmm
    Thread Name:1, default Formatter:yy MM dd
    Thread Name:2, default Formatter:yy MM dd
    Thread Name:3, default Formatter:yyyyMMdd HHmm
    Thread Name:0, default Formatter:yy MM dd
    Thread Name:3, default Formatter:yy MM dd
    Thread Name:4, default Formatter:yyyyMMdd HHmm
    Thread Name:5, default Formatter:yyyyMMdd HHmm
    Thread Name:4, default Formatter:yy MM dd
    Thread Name:5, default Formatter:yy MM dd
    Thread Name:6, default Formatter:yyyyMMdd HHmm
    Thread Name:6, default Formatter:yy MM dd
    Thread Name:7, default Formatter:yyyyMMdd HHmm
    Thread Name:8, default Formatter:yyyyMMdd HHmm
    Thread Name:7, default Formatter:yy MM dd
    Thread Name:8, default Formatter:yy MM dd
    Thread Name:9, default Formatter:yyyyMMdd HHmm
    Thread Name:9, default Formatter:yy MM dd
    

    分析

    从结果看虽然其他的线程已经改变了formatter变量,但是运行本线程时还是原始的值。

  • 相关阅读:
    Vue学习笔记(十三) 响应式原理
    CSS学习笔记(十一) CSS3新特性
    JavaScript学习笔记(十三) ES6新特性
    Node.js学习笔记(六) express模块
    Node.js学习笔记(五) http模块
    Node.js学习笔记(四) fs、os、path模块
    Node.js学习笔记(三) 模块系统
    Node.js学习笔记(二) 包管理器
    Node.js学习笔记(一) 安装配置
    用Visual Studio创建集成了gtest的命令行工程
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/11045482.html
Copyright © 2011-2022 走看看