温馨提示×

温馨提示×

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

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

怎么实现java线程封闭

发布时间:2021-11-16 14:40:11 来源:亿速云 阅读:178 作者: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