线程学习之线程本地存储

线程本地存储是解决多个线程共享一个资源(资源共享)的另一种方式。它相当于一个Map<Thread, Object>, 把一个线程和它的状态(数据)关联起来。

上代码微笑


package com.lyj;

/**
 * 防止多个线程共享一个资源-----去除对变量的共享
 * 线程本地存储  java.lang.ThreadLocal类,相当于一个Map<Thread, Object>
 * 
 */
import java.util.Random;

public class ThreadLocalDemo {
    private static ThreadLocal<Integer> value = new ThreadLocal<Integer>();
    private static ThreadLocal<MyInfo> myInfoData = new ThreadLocal<MyInfo>();

    public static void main(String[] args) {
        
        //产生2个线程
        for (int i = 0; i < 2; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int data = new Random().nextInt();
                    System.out.println(Thread.currentThread().getName() + "   " + data);
                    // 保存当前线程的数据
                    // 相当于一个Map;
                    value.set(data);

                    // 保存一个打包的对象
                    // 存放多个数据
                    MyInfo myInfo = new MyInfo();
                    myInfo.setName("lyj");
                    myInfo.setAge(20);
                    myInfoData.set(myInfo);

                    new A().get();
                    //new B().get();
                }
            }).start();
        }
    }

    static class A {
        private static void get() {
            int data = value.get();

            MyInfo myinfo = myInfoData.get();
            System.out.println("A " + Thread.currentThread().getName() + "   " + data + "  " + myinfo.getName() + "  "
                    + myinfo.getAge());
        }
    }

    static class B {
        private static void get() {
            int data = value.get();
            System.out.println("B " + Thread.currentThread().getName() + "   " + data);
        }
    }

    static class MyInfo {
        private String name;
        private int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习C#多线程的路线可以按照以下步骤进行: 1. 先了解基本概念:开始学习之前,建议先了解多线程的基本概念和原理,包括线程、进程、并发、同步等相关概念。 2. 学习线程的创建和启动:学习如何在C#创建和启动线程,可以使用Thread类或者Task类来实现。 3. 线程同步和互斥:学习如何在多线程环境下实现线程同步和互斥,以避免出现竞态条件和数据不一致的问题。可以学习使用锁、互斥量、信号量等机制来实现线程同步。 4. 学习线程间通信:学习如何在多线程环境下实现线程间的通信,以便线程之间能够进行数据交换和协作。可以学习使用共享内存、消息队列、事件等机制来实现线程间通信。 5. 学习线程池:学习如何使用线程池来管理和调度线程,以提高多线程应用程序的性能和效率。 6. 学习并发集合:学习如何使用并发集合来处理多线程环境下的数据共享和访问问题,包括并发队列、并发字典、并发栈等。 7. 学习异步编程:学习如何使用异步编程模型(Async/Await)来实现高效的异步操作,以提高多线程应用程序的响应性和吞吐量。 8. 学习线程安全性:学习如何编写线程安全的代码,以避免出现竞态条件和数据不一致的问题。可以学习使用锁、原子操作、线程本地存储等技术来确保线程安全性。 9. 实践项目:通过实践项目来巩固所学的多线程知识,可以选择一些具有多线程需求的项目来进行实践,例如网络服务器、并发任务处理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值