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
     */
  • 相关阅读:
    表操作之数据类型——日期类型
    cocos2dx tableView 的使用
    lua中的循环
    lua中 后端发过来的 按位表示值,在前端中需要处理的函数
    lua 打印表方法
    近况
    lua开发
    4)数据结构和算法学习_链表
    3)数据结构和算法学习_链表
    使用VsCode断点调试TS
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11698223.html
Copyright © 2011-2022 走看看