ThreadLocal和线程栈封闭

1、什么是线程栈封闭?
1.1 线程栈是什么?
  • 线程栈 是某个线程的一块专属内存空间。线程独享,其他线程无法访问。也就意味着不存在线程安全问题。
  • 线程栈由多个 栈帧 组成。一个线程会执行一个或多个方法,一个 方法 就对应着一个栈帧。
1.2 什么叫线程栈封闭?
  • 多线程访问共享可变数据时,涉及到线程间的数据同步问题。但并非所有时候,都需要用到共享数据,故而提出了线程封闭的概念。
  • 数据被封闭在线程各自的栈空间中,不需要进行数据同步 。这种通过将数据封闭在线程中而避免使用线程间数据同步的策略称之为线程封闭。也可以称为 线程栈封闭
  • 线程封闭的其中一种体现:ThreadLocal.

2、ThreadLocal 如何使用?
ThreadLocal介绍
  • ThreadLocal是Java中的一种特殊变量,是线程级别的变量。
  • 每一个线程都有一个ThreadLocal,即每一个线程都拥有一个专属的独立变量,不存在线程安全问题,在并发模式下是绝对安全的。

  • Api编码示范
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class ThreadLocalTests {

  private ThreadLocal<String> threadLocal = new ThreadLocal<>();

  @Test
  public void threadLocalTypeString() throws InterruptedException {

    // ##### 1 主线程设置值
    Thread.currentThread().setName("mainThread");
    threadLocal.set("value of mainThread's threadLocal");
    log.info(" ======== 主线程 " + Thread.currentThread().getName() + " 首次获取threadLocal的value值:{}",
        threadLocal.get());

    // ##### 2 子线程设置值
    new Thread(() -> {
      threadLocal.set("value of subThreadNO1's threadLocal");
      log.info(" ======== 子线程 " + Thread.currentThread().getName() + " 获取threadLocal的value值:{}",
          threadLocal.get());

    }, "subThreadNO1").start();

    // ##### 3 主线程再次获取值
    Thread.sleep(5000L); // 主线程休眠5秒
    log.info(" ======== 主线程 " + Thread.currentThread().getName() + " 再次获取threadLocal的value值:{}",
        threadLocal.get());

  }

}

  • 程序运行结果
    在这里插入图片描述

3、Github链接

Github链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值