怎么实现java线程封闭

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

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了巴州免费建站欢迎大家使用!

线程封闭

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

ThreadLocal

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

代码示例:

/** 线程封闭示例 */
public class Demo6 {
  /** threadLocal变量,每个线程都有一个副本,互不干扰 */
  public static ThreadLocal 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线程封闭”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章名称:怎么实现java线程封闭
URL分享:http://myzitong.com/article/ghhgcj.html