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
     */
  • 相关阅读:
    C#单例模式详解
    Unity基础知识学习笔记二
    Unity基础知识学习笔记一
    pat 团体赛练习题集 L2-007. 家庭房产
    JOBDU 题目1100:最短路径
    POJ 2492 A Bug's Life
    pat 团体赛练习题集 L2-008. 最长对称子串
    pat 团体赛练习题集 L2-006. 树的遍历
    POJ 1511 Invitation Cards
    codevs——1003——电话连线
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11698223.html
Copyright © 2011-2022 走看看