Java多线程(四)——多线程数据隔离与共享

本文探讨了Java多线程中数据隔离和数据共享的重要性。通过ThreadLocal实现线程间数据隔离,避免线程安全问题,如银行账户的例子。同时,介绍了两种数据共享方法:通过Runnable赋值成员变量和利用外部类共享数据,确保线程间共享特定数据的同时处理线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

一、引言

二、数据隔离

三、数据共享

1、传入Runnable赋值成员变量

2、新建外部类添加成员变量(这个是教程3中用到的,我比较常用)

四、总结


 

一、引言

 

多线程数据隔离与数据共享是个矛盾体,有些数据需要隔离,比如每个人的银行账户,有些需要共享比如买票的总火车票数量,这个问题导致了这篇文章的出现,抽象出了这两类问题。

 

 

二、数据隔离

 

多线程之间就是因为数据共享在多个线程才导致了线程不安全,这就要求线程间的数据需要隔离,从根本上解决了线程安全问题,比如我们每个人都有自己的银行账户,每次存钱行为一样,但是都存入了自己的银行账户而不是通用的银行账户。

这个问题ThreadLocal变量帮我们解决了这个问题,我们只需要创建该变量,在每个线程里面使用相当于它在每个线程里面都有一个相同名字的变量供我们使用。

public class TestThreadlocal {
    static ThreadLocal<Student> threadLocalst=new ThreadLocal<Student>();
    public  static  void  main(String [] args)
    {
        //System.out.print("asdf");

        for (int i=0;i<10;i++)
        {
            new Thread(new Runnable() {
                public void run() {
                    Student student=new Student();
                    student.setAge(new Random().nextInt() +"");
                    student.setName("xcy");
                    System.out.println(Thread.currentThread().getName()+ student.getName()+student.getAge());
                    threadLocalst.set(student);

                    new A().get();
                    new B().get();

                }
            }){}.start();
        }

    }
    static class A{
        public void get (){

            Student st=threadLocalst.get();
            System.out.println(Thread.currentThread().getName()+ st.getName()+st.getAge());

        }
    }
    static class B{
        public v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值