纵有疾风起
人生不言弃

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 HHmmThread Name:1, default Formatter:yyyyMMdd HHmmThread Name:2, default Formatter:yyyyMMdd HHmmThread Name:1, default Formatter:yy MM ddThread Name:2, default Formatter:yy MM ddThread Name:3, default Formatter:yyyyMMdd HHmmThread Name:0, default Formatter:yy MM ddThread Name:3, default Formatter:yy MM ddThread Name:4, default Formatter:yyyyMMdd HHmmThread Name:5, default Formatter:yyyyMMdd HHmmThread Name:4, default Formatter:yy MM ddThread Name:5, default Formatter:yy MM ddThread Name:6, default Formatter:yyyyMMdd HHmmThread Name:6, default Formatter:yy MM ddThread Name:7, default Formatter:yyyyMMdd HHmmThread Name:8, default Formatter:yyyyMMdd HHmmThread Name:7, default Formatter:yy MM ddThread Name:8, default Formatter:yy MM ddThread Name:9, default Formatter:yyyyMMdd HHmmThread Name:9, default Formatter:yy MM dd

分析

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

 

文章转载于:https://www.cnblogs.com/kaituorensheng/p/11045482.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » ThreadLocal
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录