温馨提示×

温馨提示×

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

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

怎么实现java线程封闭

发布时间:2021-11-16 14:40:11 来源:亿速云 阅读:314 作者:iii 栏目:大数据

本篇内容主要讲解“怎么实现java线程封闭”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现java线程封闭”吧!

线程封闭

多线程访问共享可变数据时,并不是所有的时候,都要用到共享数据, 所以线程封闭的概念就提了出来。 所谓线程封闭, 就是指数据都封闭在各自的线程之中, 不需要不需要同步。线程封闭的具体的实现主要有ThreadLocal局部变量

ThreadLocal

ThreadLocal是Java里一种特殊的变量,一个线程级别的变量,每个线程都有一个自己独立的ThreadLocal变量。它的竞争条件被彻底消除, 在并发模式下是绝对安全的。 用法:ThreadLocal<T> var = new ThreadLocal<T>(); 会自动在每个线程上创建一个T的副本, 副本之间彼此独立,互不影响。 可以用ThreadLocal存储一些参数,以便在线程中多个方法中使用, 用来代替方法传参的的做法

代码示例:

/** 线程封闭示例 */ public class Demo6 {   /** threadLocal变量,每个线程都有一个副本,互不干扰 */   public static ThreadLocal<String> value = new ThreadLocal<>();   /**    * threadlocal测试    *    * @throws Exception    */   public void threadLocalTest() throws Exception {     // threadlocal线程封闭示例     value.set("这是主线程设置的123"); // 主线程设置值     String v = value.get();     System.out.println("线程1执行之前,主线程取到的值:" + v);     new Thread(             new Runnable() {               @Override               public void run() {                 String v = value.get();                 System.out.println("线程1取到的值:" + v);                 // 设置 threadLocal                 value.set("这是线程1设置的456");                 v = value.get();                 System.out.println("重新设置之后,线程1取到的值:" + v);                 System.out.println("线程1执行结束");               }             })         .start();     Thread.sleep(5000L); // 等待所有线程执行结束     v = value.get();     System.out.println("线程1执行之后,主线程取到的值:" + v);   }   public static void main(String[] args) throws Exception {     new Demo6().threadLocalTest();   } }

输出结果:

线程1执行之前,主线程取到的值:这是主线程设置的123 线程1取到的值:null 重新设置之后,线程1取到的值:这是线程1设置的456 线程1执行结束 线程1执行之后,主线程取到的值:这是主线程设置的123

栈封闭

局部变量的固有属性之一就是封闭在线程中 它们位于执行线程的栈中, 其他线程无法访问这个栈

到此,相信大家对“怎么实现java线程封闭”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

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

AI