package com.cgm.threadlocal;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class MyThread {
static Map<Thread, Object> map=new HashMap<Thread, Object>();
public static Object getObj(){
Thread th=Thread.currentThread();
Object o=map.get(th);
if (o==null) {
o=new Random().nextInt(1000);
map.put(th, o); //保证每一个线程都是一个单独的值 互不干预
}
return o;
}
}
测试类
package com.cgm.threadlocal;
import org.junit.Test;
public class ThreadLoaclTest {
@Test
public void testThread(){
Object o1= MyThread.getObj();
Object o2= MyThread.getObj();
System.out.println(o1);
System.out.println(o2); //o1 o2 同一个值
Thread t=new Thread(){
public void run() {
Object o3= MyThread.getObj();
Object o4= MyThread.getObj();
System.out.println(o3);
System.out.println(o4); //o3 o4 同一个值
}
};
}
}
分享到:
相关推荐
### ThreadLocal基本使用 创建ThreadLocal实例时,通常会定义一个泛型参数,代表该线程局部变量的类型。例如: ```java ThreadLocal<String> threadLocal = new ThreadLocal(); ``` ### 设置和获取值 在...
在Java的`ThreadLocal`实现中,每个线程都有一个`ThreadLocalMap`,它是`ThreadLocal`的一个内部类,用于存储线程局部变量。`ThreadLocalMap`使用弱引用作为键,目的是在线程不再引用ThreadLocal对象时,允许垃圾...
ThreadLocal的基本用法 ThreadLocal的用法非常简单,首先创建一个ThreadLocal实例,然后通过`set()`方法设置线程局部变量的值,通过`get()`方法获取该值。需要注意的是,ThreadLocal中的变量并不是存储在堆内存中...
总的来说,结合JDBC的事务管理和ThreadLocal,我们可以在多线程环境中更好地实现数据库操作,确保数据的一致性,并提高代码的可复用性和安全性。通过使用ThreadLocal,我们可以创建线程安全的变量,使得每个线程都能...
首先,了解Spring事务管理的基本概念。在多线程环境中,事务管理是至关重要的,它负责确保一组数据库操作要么全部成功,要么全部失败。Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。声明式...
下面是一个基本的实现: ```java public class SimpleThreadLocal<T> { private Map, T> valueMap = new HashMap(); public void set(T newValue) { valueMap.put(Thread.currentThread(), newValue); } ...
通过本文的学习,能够掌握ThreadLocal的基本用法及其内部实现原理,从而正确地使用ThreadLocal以提高程序的性能和稳定性。 其他说明:为了更好地理解ThreadLocal的工作机制,建议实际动手尝试文中提供的实例代码,...
- **避免使用基本类型或null作为ThreadLocal的类型**:这样做可能导致意外的空指针异常。最好使用包装类,或者自定义类型,确保初始值有意义。 通过上述分析,我们可以看出`ThreadLocal.rar`中的代码示例可能涉及了...
通过上述方式,开发者可以利用ThreadLocal在Java Web环境中实现手动事务管理,保证数据操作的一致性和正确性。然而,考虑到代码的可维护性和复杂性,通常推荐使用Spring等框架提供的声明式事务管理。
ThreadLocal基本用法 #### 2.1 初始化 首先,我们需要创建一个ThreadLocal实例,例如: ```java private static ThreadLocal<String> mThreadLocal = new ThreadLocal(); ``` #### 2.2 存储值 然后,在需要的...
1. **ThreadLocal的基本用法** - 创建ThreadLocal实例:`ThreadLocal<T> threadLocal = new ThreadLocal();` - 设置线程局部变量:`threadLocal.set(value);` - 获取线程局部变量:`T value = threadLocal.get();...
AopLogAopLog是基于SpringAop和ThreadLocal实现的一个对请求方法埋点记录与处理的日志工具包。设计目的和场景:使用Spring Aop拦截程序,基本上都是同一个小异,不想日后每个项目都柏林都写一份这样的Aop拦截处理...
ThreadLocal的基本使用非常简单,只需要定义一个ThreadLocal变量,然后使用set方法设置初始值,使用get方法获取当前线程的值。 ThreadLocal的实现原理基于ThreadLocalMap,该map将每个线程作为key,线程局部变量...
栈封闭和 ThreadLocal 是 Java 线程封闭中两种常见的实现方式。 栈封闭 栈封闭是将资源封闭在每个线程的栈中,以保证线程安全。由于每个线程都有自己的虚拟机栈,所以在栈中存放的资源是线程私有的,不会被其他...
synchronized关键字是最基本的同步锁,它可以用来修饰方法或者代码块,以保证同一时刻只有一个线程可以执行被修饰的部分。ReentrantLock是一种可重入锁,它提供了比synchronized更广泛的锁操作,例如尝试非阻塞地...
在深入理解ThreadLocal之前,我们需要明确其基本用法。ThreadLocal有一个`set`方法用于存储数据,一个`get`方法用于获取数据。这两个方法的操作都是针对当前线程进行的。下面我们将详细解析这两个方法的实现过程。 ...
#### 三、`ThreadLocal`的基本原理 `ThreadLocal`能够实现为每个线程维护独立的变量副本,其内部实现依赖于`ThreadLocalMap`结构。每个线程中都有一个`ThreadLocalMap`实例,用于存储线程局部变量的副本。`...
接下来是动态切换数据源的关键,这通常通过AOP(面向切面编程)和ThreadLocal来实现。创建一个自定义的`Aspect`,并在方法执行前根据业务逻辑选择合适的数据源: ```java @Aspect @Component public class ...
ThreadLocal的实现原理 生产者消费者模型 线程池的实现方式 JVM相关(1.271.31) 垃圾回收机制 分代回收算法 垃圾回收算法 类加载过程(双亲委托) JMM(Java内存结构模型) Android基础(1.251.27) ...
- ThreadLocal的理解与应用。 10. **反射机制**: - Class类的使用,动态加载类,获取类信息,创建对象等。 - Method, Field, Constructor对象的使用,以及invoke()方法。 以上只是Java面试中可能涉及的一部分...