美文网首页
JUC-ThreadLocal

JUC-ThreadLocal

作者: GIT提交不上 | 来源:发表于2020-05-14 20:46 被阅读0次

    一、ThreadLocal

      把ThreadLocal看成一个全局Map<Thread, Object>,每个线程获取ThreadLocal变量时,总是使用Thread自身作为key。相当于给每个线程都开辟了一个独立的存储空间,各个线程的ThreadLocal关联的实例互不干扰

    • ThreadLocal表示线程的"局部变量",它确保每个线程的ThreadLocal变量都是各自独立的。
    • ThreadLocal适合在一个线程的处理流程中保持上下文(避免了同一参数在所有方法中传递)
    • 使用ThreadLocal要用try ... finally结构,并在finally中清除
    public class Test {
        public static void main(String[] args) {
            Share share = new Share();
            for (int i = 0; i < 100; i++) {
                new Thread(() -> {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    share.setLocal();
                    share.print();
                }, String.valueOf(i)).start();
            }
        }
    }
    class Share implements AutoCloseable{
        private ThreadLocal<String> local = new ThreadLocal<>();
        public void setLocal() {
            local.set(Thread.currentThread().getName());
        }
        public void print() {
            System.out.println(local.get());
        }
        @Override
        public void close(){
            local.remove();
        }
    }
    

    使用ThreadLocal

    相关文章

      网友评论

          本文标题:JUC-ThreadLocal

          本文链接:https://www.haomeiwen.com/subject/icwxohtx.html