Java 线程间信息传递方式

方法一:
共享数据定义为静态类变量
适合全局共享数据的场景,即进程内所有线程可访问。
将数据对象定义为静态类变量,进程内的所有线程即可在数据对象允许的范围内实现访问数据对象。

方法二:
使用volatile关键字在线程之间共享数据

方法三:
使用InheritableThreadLocal
在多线程编程中,共享数据可能导致一系列的问题,如数据竞争和线程安全性问题。ThreadLocal(线程局部变量)是Java中一种解决多线程共享数据问题的机制。

ThreadLocal是Java中的一个类,用于提供线程本地变量。它允许你创建的变量只在访问它的线程中存在,不同线程间互不影响。每个线程都持有一个该变量的副本,而不是共享同一个实例。ThreadLocal
InheritableThreadLocal 的实现原理与 ThreadLocal 类似,都是通过在每个线程中维护一个映射(ThreadLocalMap)来实现的。但是,不同之处在于 InheritableThreadLocal 在创建子线程时,会将父线程的 InheritableThreadLocal 变量的值复制给子线程,以实现值的继承。

下面是线程初始化时会判断父线程的inheritableThreadLocals是否为空,如果不为空就将当前线程的inheritableThreadLocals设置为父线程的inheritableThreadLocals。
使用实例:

public class ThreadLocalDemo {

    public static void main(String[] args) {
        ThreadLocal threadLocal = new ThreadLocal();
        threadLocal.set("thread local");

        ThreadLocal threadLocal2 = new InheritableThreadLocal();
        threadLocal2.set("父子通信");

        Thread t = new Thread(() -> {

            System.out.println("好好学习" + threadLocal.get()+ threadLocal.toString());
            System.out.println("好好学习" +threadLocal2.get()+  threadLocal2.toString());
        });

        t.start();
        System.out.println(t.toString());

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值