温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaWeb多线程ThreadLocal如何使用

发布时间:2022-09-26 13:47:41 来源:亿速云 阅读:146 作者:iii 栏目:开发技术

这篇文章主要介绍“JavaWeb多线程ThreadLocal如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaWeb多线程ThreadLocal如何使用”文章能帮助大家解决问题。

首先ThreadLocal肯定是全局共享的:

public class Tools{     public static ThreadLocal<String> t1 = new ThreadLocal<String>(); }

写一个线程往ThreadLocal里面塞值:

public class ThreadLocalThread extends Thread{    private static AtomicInteger ai = new AtomicInteger();         public ThreadLocalThread(String name)     {        super(name);     }         public void run()     {        try         {            for (int i = 0; i < 3; i++)             {                 Tools.t1.set(ai.addAndGet(1) + "");                 System.out.println(this.getName() + " get value--->" + Tools.t1.get());                 Thread.sleep(200);             }         }        catch (InterruptedException e)         {             e.printStackTrace();         }     } }

写个main函数,启动三个ThreadLocalThread:

public static void main(String[] args) throws Exception    {         ThreadLocalThread a = new ThreadLocalThread("ThreadA");         ThreadLocalThread b = new ThreadLocalThread("ThreadB");         ThreadLocalThread c = new ThreadLocalThread("ThreadC");         a.start();         b.start();         c.start();     }

看一下运行结果:

ThreadA get value--->1ThreadC get value--->2ThreadB get value--->3ThreadB get value--->4ThreadC get value--->6ThreadA get value--->5ThreadC get value--->8ThreadA get value--->7ThreadB get value--->9

看到每个线程的里都有自己的String,并且互不影响----因为绝对不可能出现数字重复的情况。用一个ThreadLocal也可以多次set一个数据,set仅仅表示的是线程的ThreadLocal.ThreadLocalMap中table的某一位置的value被覆盖成你最新设置的那个数据而已,对于同一个ThreadLocal对象而言,set后,table中绝不会多出一个数据,这里要注意,如果第一次没有给ThreadLocal设置值的话,是会返回null的。

关于“JavaWeb多线程ThreadLocal如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI