zoukankan      html  css  js  c++  java
  • ThreadLocal

    /*
    ThreadLocal:使用空间换时间  效率更高
    线程同步:使用时间换空间
     
     ThreadLocal可能会导致内存泄漏
     */
    /**
     * ThreadLocal 线程局部变量
     */
    public class ThreadLocal2 {
    
        static ThreadLocal<Person> p = new ThreadLocal<>();
    
        public static void main(String[] args) {
            new Thread(() -> {
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(p.get()); // 2. 虽然threadLocal时共享变量,但是取不到其他线程放入的值,所以此处为null
            }).start();
    
            new Thread(() -> {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                p.set(new Person()); // 1. 往线程局部变量放入一个person
            }).start();
        }
        
        static class Person {
            String name = "zhangsan";
        }
    }
    
    /*
    ThreadLocal:使用空间换时间  效率更高
    线程同步:使用时间换空间
     
     ThreadLocal可能会导致内存泄漏
     */

    线程局部变量

    /**
     * ThreadLocal 线程局部变量
     */
    public class ThreadLocal1 {
    
        /*volatile*/ static Person p = new Person();
    
        public static void main(String[] args) {
            new Thread(() -> {
                System.out.println(p.name);
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(p.name);  // 在加与不加volatile的情况下,这句话打印的值分别是? 答:不写volatile有可能发生可见性问题
            }).start();
    
            new Thread(() -> {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                p.name = "lisi";
            }).start();
        }
        
        static class Person {
            String name = "zhangsan";
        }
    }
    
    /*
    
    如果想要共享变量不可见呢?  就需要使用ThreadLocal
     */
  • 相关阅读:
    JAVA_集合_作业01
    Java_Objects_hashCode
    Java成员内部类
    Java集合练习_实现购物车需求
    Java初级_单例设计模式
    HelloWorld
    vue中视频标点
    防抖节流?俩者区别?vue如何使用防抖、节流来解决点击问题?
    keep-alive
    axios和ajax的区别
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11698223.html
Copyright © 2011-2022 走看看