博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThreadLocal 的使用
阅读量:3963 次
发布时间:2019-05-24

本文共 2307 字,大约阅读时间需要 7 分钟。

ThreadLocal 的概念

ThreadLocal 的作用,它可以解决多线程的数据安全问题

ThreadLocal 它可以给当前线程关联一个数据(可以是普通变量,可以是对象,也可以是数组,集合)

ThreadLocal 的特点:

  • 1、ThreadLocal 可以为当前线程关联一个数据。(它可以像 Map 一样存取数据,key 为当前线程)
  • 2、每一个 ThreadLocal 对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数据,就需要使用多个 ThreadLocal 对象实例。
  • 3、每个 ThreadLocal 对象实例定义的时候,一般都是 static 类型
  • 4、ThreadLocal 中保存数据,在线程销毁后。会由 JVM 虚拟自动释放。

代码举例:

ThreadLocalTest:

public class ThreadLocalTest {
// public static Map
data = new Hashtable
(); public static ThreadLocal
threadLocal = new ThreadLocal(); public static Random random = new Random(); public static class Task implements Runnable{
@Override public void run() {
// 在Run方法中,随机生成一个变量(线程要关联的数据),然后以当前线程名为key保存到map中 int i = random.nextInt(1000);// String name = Thread.currentThread().getName();// System.out.println("线程["+name+"]生成的随机数是:" + i);// data.put(name,i); String name = Thread.currentThread().getName(); System.out.println("在线程[" +name + "]保存的值是:" + i ); threadLocal.set(i); try {
Thread.sleep(3000); } catch (InterruptedException e) {
e.printStackTrace(); } new OrderService().createOrder();//调用OrderService里的createOrder()方法 // 在Run方法结束之前,以当前线程名获取出数据并打印。查看是否可以取出操作// Object o = data.get(name); Object o = threadLocal.get();// System.out.println("在线程["+name+"]快结束时取出关联的数据是:" + o); System.out.println("在线程["+name+"]快结束时取出关联的数据是:" + o); } } public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
new Thread(new Task()).start(); } }}

OrderService

public class OrderService {
public void createOrder(){
String name = Thread.currentThread().getName(); System.out.println("OrderService 当前线程[" + name + "]中保存的数据是:" + ThreadLocalTest.threadLocal.get()); new OrderDao().saveOrder(); }}

OrderDao:

public class OrderDao {
public void saveOrder(){
String name = Thread.currentThread().getName(); System.out.println("OrderDao 当前线程[" + name + "]中保存的数据是:" + ThreadLocalTest.threadLocal.get()); }}

在这里插入图片描述

结论:同一个线程的i是相同的,每一个 ThreadLocal 对象,只能为当前线程关联一个数据

转载地址:http://fmuki.baihongyu.com/

你可能感兴趣的文章
软件测试
查看>>
软件维护
查看>>
软件项目管理
查看>>
面向过程的分析方法
查看>>
软件设计基础
查看>>
Hibernate性能优化
查看>>
Spring核心ioc
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
Struts2+Spring3+Mybatis3开发环境搭建
查看>>
mongoDB入门必读(概念与实战并重)
查看>>
通俗易懂解剖jbpm4
查看>>
rsync
查看>>
makefile
查看>>
linux 文件权限
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>