线程局部变量共享 -- 使用ThreadLocal解决该需求

1.创建容器类

//容器类
public class Contain {

	private static final ThreadLocal<DataPackage> local;
	
	 static {
		 local = new ThreadLocal<>();
	 }

	public static ThreadLocal<DataPackage> getLocal() {
		return local;
	}
}

2.创建数据包类

//数据包类
public class DataPackage {
	
	private String str;
	private int num;
	
	public static DataPackage getInstance(String str, int num) {
		//获取当前线程共享的DataPackage对象
		ThreadLocal<DataPackage> local = Contain.getLocal();
		DataPackage dataPackage = local.get();
		
		if(dataPackage == null) {
			dataPackage = new DataPackage(str, num);
			local.set(dataPackage);
		}else {
			dataPackage.setStr(str);
			dataPackage.setNum(num);
		}
		return dataPackage;
	}
	
	private DataPackage(String str, int num) {
		super();
		this.str = str;
		this.num = num;
	}

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	@Override
	public String toString() {
		return "DataPackage [str=" + str + ", num=" + num + "]";
	}
	
}

3.创建A类B类

public class A {
	 
	public void println() {
		
		//获取容器
		ThreadLocal<DataPackage> local = Contain.getLocal();
		
		//通过当前线程获取对应的共享数据
		Thread t = Thread.currentThread();
		DataPackage data = local.get();
		System.out.println(t.getName() + "里的A类对象获取了数据:" + data);
		
	}

}

public class B {
	
	public void println() {
		
		ThreadLocal<DataPackage> local = Contain.getLocal();
		
		Thread t = Thread.currentThread();
		DataPackage data = local.get();
		System.out.println(t.getName() + "里的B类对象获取了数据:" + data);
		
	}

}

4.创建测试类

public class Test01 {

	//知识点:线程局部变量共享的问题 -- 使用ThreadLocal解决该需求
	public static void main(String[] args) {

		//线程1
		new Thread(new Runnable() {

			@Override
			public void run() {
				//共享的数据
				DataPackage dataPackage = DataPackage.getInstance("我好像在哪见过你", 10);

				//获取容器,并存储数据
				ThreadLocal<DataPackage> local = Contain.getLocal();
				local.set(dataPackage);

				//创建对象
				A a = new A();
				B b = new B();

				//获取共享数据
				a.println();
				b.println();

			}
		},"线程1").start();

		//线程2
		new Thread(new Runnable() {

			@Override
			public void run() {
				//共享的数据
				DataPackage dataPackage = DataPackage.getInstance("明明就", 20);
						
				//获取容器,并存储数据
				ThreadLocal<DataPackage> local = Contain.getLocal();
				local.set(dataPackage);

				//创建对象
				A a = new A();
				B b = new B();

				//获取共享数据
				a.println();
				b.println();
				
			}
		},"线程2").start();

	}

}

相关推荐

  1. 线局部变量共享 -- 使用ThreadLocal解决需求

    2024-07-22 00:24:02       18 阅读
  2. 线局部变量共享

    2024-07-22 00:24:02       21 阅读
  3. 理解并使用ThreadLocal实现线级别的数据隔离

    2024-07-22 00:24:02       48 阅读
  4. ThreadLocal+TaskDecorator实现父子线 参数传递

    2024-07-22 00:24:02       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 00:24:02       64 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 00:24:02       67 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 00:24:02       54 阅读
  4. Python语言-面向对象

    2024-07-22 00:24:02       66 阅读

热门阅读

  1. 内联汇编清楚变量指定位

    2024-07-22 00:24:02       22 阅读
  2. 信竞2024年csp-j模拟赛第二场赛后总结

    2024-07-22 00:24:02       25 阅读
  3. 《C++并发编程实战》笔记(三)

    2024-07-22 00:24:02       22 阅读
  4. 决策树:简单而强大的机器学习算法

    2024-07-22 00:24:02       23 阅读
  5. 过拟合和欠拟合的解决办法

    2024-07-22 00:24:02       23 阅读
  6. mac电脑显示隐藏文件

    2024-07-22 00:24:02       24 阅读
  7. 十、继承

    2024-07-22 00:24:02       21 阅读
  8. Dubbo 的服务降级

    2024-07-22 00:24:02       20 阅读
  9. iOS 语言基础&初探 Xcode 工具

    2024-07-22 00:24:02       23 阅读
  10. python编程技巧——list计算

    2024-07-22 00:24:02       25 阅读
  11. C语言用顺序表实现二叉树

    2024-07-22 00:24:02       22 阅读