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可能会导致内存泄漏
 */

 

上一篇:代码实现排列组合【Java】


下一篇:[洛谷P1842] 奶牛玩杂技