千家信息网

怎么实现java线程封闭

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容主要讲解"怎么实现java线程封闭",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么实现java线程封闭"吧!线程封闭多线程访问共享可变数据时,并
千家信息网最后更新 2025年02月02日怎么实现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线程封闭"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0