千家信息网

ThreadLocal中怎么实现线程局部变量

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,ThreadLocal中怎么实现线程局部变量,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。public class ThreadLoca
千家信息网最后更新 2025年02月05日ThreadLocal中怎么实现线程局部变量

ThreadLocal中怎么实现线程局部变量,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

public class ThreadLocal1 {        volatile static Person p = new Person();                public static void main(String[] args) {                                                new Thread(()->{                        try {                                TimeUnit.SECONDS.sleep(2);                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                                                System.out.println(p.name);                }).start();                                new Thread(()->{                        try {                                TimeUnit.SECONDS.sleep(1);                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                        p.name = "lisi";                }).start();        }}class Person {        String name = "zhangsan";}

不想让另一个线程改成lisi

/** * ThreadLocal线程局部变量 * * ThreadLocal是使用空间换时间,synchronized是使用时间换空间 * 比如在hibernate中session就存在与ThreadLocal中,避免synchronized的使用 * * 运行下面的程序,理解ThreadLocal **/ public class ThreadLocal2 {        //volatile static Person p = new Person();        static ThreadLocal tl = new ThreadLocal<>();                public static void main(String[] args) {                                                new Thread(()->{                        try {                                TimeUnit.SECONDS.sleep(2);                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                                                System.out.println(tl.get());                }).start();                                new Thread(()->{                        try {                                TimeUnit.SECONDS.sleep(1);                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                        tl.set(new Person());                }).start();         }                static class Person {                String name = "zhangsan";        }}

看完上述内容,你们掌握ThreadLocal中怎么实现线程局部变量的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0