`

ThreadLocal数据共享与优雅设计

    博客分类:
  • J2SE
阅读更多

ThreadLocal用于实现线程内的数据共享,即对于相同的代码,多个模块在同一线程中运行时要共享一份数据,而在另外的线程中运行时又共享另外一份数据.

实现对ThreadLocal变量的封装,让外界不直接操作ThreadLocal变量,一是对基本类型的数据封装,这种应用相对少见,二是对对象类型的数据封装,较常见,即让某个类针对不同线程分别创建一个独立的实例对象.

以下是ThreadLocal常用封装:

class MyThreadScopeData{
	private MyThreadScopeData(){}
	public static MyThreadScopeData getThreadInstance(){
		MyThreadScopeData instance = map.get();
		if(instance == null){
			instance = new MyThreadScopeData();
			map.set(instance);
		}
		return instance;
	}
	
	private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>();
	
	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;
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java 简单的ThreadLocal示例

    Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,尤其在处理线程间数据隔离和共享时。ThreadLocal不是线程本身,而是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地改变...

    Spring事务处理-ThreadLocal的使用

    例如,如果线程之间需要共享数据,但又不想影响其他线程,ThreadLocal就是一个理想的选择。同时,也要注意ThreadLocal的内存泄漏问题,当线程结束但ThreadLocal未清除时,可能会导致内存占用过高。 总之,Spring...

    java事务 - 模板设计模式

    在Java编程领域,事务管理是确保数据一致性与完整性的关键机制。事务是数据库操作的一组逻辑单元,这些操作要么全部成功,要么全部回滚,从而防止数据不一致的情况发生。而模板设计模式则是一种行为设计模式,它提供...

    Java并发编程:设计原则与模式(第二版).rar

    4. **并发集合**:Java的并发集合类库,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`BlockingQueue`,是高并发环境下数据共享的重要工具。书中会详细讲解这些集合类的设计原理和使用技巧。 5. **并发设计模式...

    基于Hibernate的数据持久层关键技术的研究

    二级缓存则需要额外配置,用于跨Session的数据共享。 #### 四、持久层的设计与实现 在构建基于Hibernate的信息查询系统时,持久层的设计尤为关键。为了确保系统的可扩展性和可维护性,采用了以下几种设计模式和...

    Java常用并发设计模式精讲

    2. **避免共享的设计模式**:共享数据是引发线程安全问题的主要源头。一种有效的策略是使用“不可变”对象,这些对象一旦创建就无法改变。此外,可以使用"线程局部变量"(ThreadLocal)来为每个线程提供独立的副本,...

    JAVA多线程设计模式 书和源码

    在多线程环境中,数据共享可能导致竞态条件,这时需要使用同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法。此外,`java.util.concurrent`包提供了高级并发工具,如`Semaphore`(信号量...

    java多线程设计模式详解.rar

    10. **线程局部变量**:`ThreadLocal`类允许每个线程都有自己的变量副本,减少了共享数据带来的同步问题。 以上就是Java多线程设计模式的一些核心概念,理解并熟练运用这些模式,能帮助开发者编写出高效、安全的...

    Java多线程程序设计

    为了确保数据一致性,当多个线程访问共享资源时,需要使用同步机制,如`synchronized`关键字或`Lock`接口。 5. **线程休眠** - `Thread.sleep(long milliseconds)`方法让当前线程进入休眠状态,指定的时间过后线程...

    并发编程78讲 文档 资料

    - **ThreadLocal的使用场景**:在第44讲中,讨论了ThreadLocal在实际生产中的应用,如解决线程间数据隔离的问题,避免了共享数据带来的并发问题。 5. **性能优化** - **多线程带来的性能问题**:第08讲揭示了过度...

    Java并发编程实践

    第二章:共享数据与并发问题 在这一章中,作者深入讨论了多线程环境下共享数据带来的问题,如数据竞争(Race Condition)、死锁(Deadlock)、活锁(LiveLock)和饥饿(Starvation)。介绍了 volatile 关键字的作用...

    Java 并发核心编程原文+译文

    6. **线程局部变量**:`ThreadLocal`类为每个线程都提供了独立的变量副本,避免了线程间的数据共享问题,但过度使用可能导致内存泄漏。 7. **并发设计模式**:生产者消费者模型、读写锁策略、双检锁/双重校验锁...

    Java线程处理

    这种特性使得线程间的数据共享非常便捷,但也带来了同步问题。 **3.2 同步机制** 为了解决线程间的数据竞争问题,Java提供了多种同步机制: - **synchronized关键字:** 可用于方法或代码块,确保同一时刻只有一...

    java并发规范(线程及锁).docx

    9. **分离锁与分散锁**:尽可能选择分离锁(如`ReentrantReadWriteLock`)或无锁数据结构(如`ConcurrentHashMap`),以提高并发性能。 10. **基于`ThreadLocal`避免锁**:在某些情况下,使用`ThreadLocal`可以避免...

    Java 实例 - 多线程异常处理源代码-详细教程.zip

    - **ThreadLocal**:`ThreadLocal`提供线程局部变量,每个线程都有自己的副本,避免了线程间的数据冲突。 五、线程池与异常处理 Java的`ExecutorService`和`ThreadPoolExecutor`允许我们管理和控制线程。当线程池中...

    Java Thread Programming

    Java语言在设计时就充分考虑了多线程环境,提供了丰富的API和机制来支持线程的创建、同步与通信。本书深入浅出地讲解了这些概念,包括线程的生命周期、线程的优先级、线程的启动与终止,以及如何处理线程间的竞争...

    c#多线程编程

    然而,直接停止线程(如调用`Thread.Abort()`)可能会导致数据不一致,因此推荐使用共享标志或`volatile`关键字来优雅地关闭线程。 3. **线程同步与互斥**: - `Mutex`:互斥锁,确保同一时间只有一个线程访问特定...

    .net版本简单线程调用源码

    8. **线程局部存储**:使用`ThreadLocal&lt;T&gt;`类,可以在每个线程中维护独立的数据副本,避免了线程间的共享状态。 9. **并发集合**:`.NET`提供了一些线程安全的集合类,如`ConcurrentDictionary, TValue&gt;`和`...

    最热门的Java 面试题汇总

    11. **AQS中的共享锁与独占锁**:独占锁只有一个线程能获得,如synchronized;共享锁允许多个线程同时获取,如ReentrantReadWriteLock。 12. **生产者消费者模型**:一种多线程同步模型,生产者线程生成数据,消费...

Global site tag (gtag.js) - Google Analytics