`

ThreadLocal2

阅读更多
public class SequenceNumber {

	private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() {

		public Integer initialValue() {
			
			/*
			 * 对每一个线程来说这里都是new Integer(1000),是不同的对象
			 * 这样才做到ThreadLocal每个线程保存自己的变量
			 */
			return 1000;  // -128 to  127 有缓存的
			

		}

	};

	public int getNextNum() {
		Integer a = seqNum.get();
		seqNum.set(seqNum.get() + 0);
		/*
		 * +1可以看到各个线程产生的各自产生数字
		 */
		//seqNum.set(seqNum.get() + 1);  
		//全部都是false
		System.out.println(a==seqNum.get());//false
		return seqNum.get();

	}

	public static void main(String[] args)

	{

		SequenceNumber sn = new SequenceNumber();

		TestClient t1 = new TestClient(sn);

		TestClient t2 = new TestClient(sn);

		TestClient t3 = new TestClient(sn);

		t1.start();

		t2.start();

		t3.start();

	}

	private static class TestClient extends Thread

	{

		private SequenceNumber sn;

		public TestClient(SequenceNumber sn) {

			this.sn = sn;

		}

		public void run()

		{

			for (int i = 0; i < 3; i++) {

				System.out.println("thread[" + Thread.currentThread().getName()
						+

						"] sn[" + sn.getNextNum() + "]");

			}

		}

	}

}

 

分享到:
评论

相关推荐

    ThreadLocal应用示例及理解

    **线程局部变量(ThreadLocal)是Java编程中一个非常重要的工具类,它在多线程环境下提供了线程安全的数据存储。ThreadLocal并不是一个变量,而是一个类,它为每个线程都创建了一个独立的变量副本,使得每个线程都...

    ThreadLocal

    2. 使用`set`方法设置线程局部变量的初始值。 3. 在需要访问该变量的线程中,通过`get`方法获取变量副本。 4. 当不再需要使用ThreadLocal时,建议清除线程局部变量,防止内存泄漏。可以调用`remove`方法来实现。 ...

    ThreadLocal 内存泄露的实例分析1

    在 `LeakingServlet` 的 `doGet` 方法中,如果 `ThreadLocal` 没有设置值,那么会创建一个新的 `MyCounter` 并设置到 `ThreadLocal` 中。关键在于,一旦 `MyCounter` 被设置到 `ThreadLocal`,那么它将与当前线程...

    ThreadLocal整理.docx

    同时, ThreadLocal 还提供了扩容机制,当数组的 size 大于总长度的 2/3 时,会触发扩容操作,扩容后将原来的数组长度乘以 2倍。 在 ThreadLocal 中,set 方法的逻辑是先获取当前线程的存取副本变量的 map,然后...

    正确理解ThreadLocal.pdf

    2. **事务处理**:在事务管理中,`ThreadLocal`可以用于维护每个线程的事务状态,确保事务的完整性和一致性。 3. **日志记录**:在多线程环境中,`ThreadLocal`可以用于维护每个线程的日志上下文,如线程ID、用户名...

    java事务 - threadlocal

    例如,在分布式服务中,可能会使用分布式事务解决方案如两阶段提交(2PC)、补偿事务(TCC)等,而ThreadLocal则可以辅助管理这些分布式事务的状态。 总结一下,Java事务和ThreadLocal都是Java多线程编程中不可或缺...

    java中ThreadLocal详解

    2. **expungeStaleEntry方法**:当`ThreadLocal`对象被垃圾回收后,`ThreadLocalMap`中的相应条目将变为无效。`ThreadLocal`提供了一个`expungeStaleEntry`方法来清理这些无效条目,确保不会发生内存泄漏。 #### 五...

    java 简单的ThreadLocal示例

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

    ThreadLocal简单Demo

    2. **内部类ThreadLocalMap**: `ThreadLocalMap`是`ThreadLocal`类中的一个内部静态类,它是一个定制的哈希映射,专门用于存储线程局部变量。每个`Thread`对象都包含一个`ThreadLocalMap`实例,用于保存该线程的`...

    理解ThreadLocal

    理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal

    ThreadLocal的几种误区

    2. 存放上下文变量:如WebWork的ActionContext,它可以保存请求处理过程中的各种上下文信息,如动作对象、请求参数等。 3. 存储数据库会话:在Spring Hibernate ORM中,ThreadLocal常用来保存数据库连接的Session,...

    ThreadLocal原理及在多层架构中的应用

    ### 2. ThreadLocal的应用场景 ThreadLocal常用于以下场景: - **线程安全的配置对象**:在多层架构中,如Spring框架中,可以使用ThreadLocal来存储线程相关的配置信息,如数据库连接、事务管理等,确保这些对象...

    设计模式及ThreadLocal资料

    本资料主要聚焦于两种设计模式以及Java中的ThreadLocal特性。 首先,我们来探讨单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。在Java中,通常通过私有构造函数、静态工厂方法或...

    使用ThreadLocal管理“session”数据

    2. **为什么使用ThreadLocal管理Session?** 在传统的多线程Web应用中,由于多个线程可能会处理同一个请求,如果直接在全局变量中存储session信息,可能会导致线程安全问题。而ThreadLocal提供了一个线程局部的存储...

    ThreadLocal_ThreadLocal源码分析_

    2. **避免null值**:不要将ThreadLocal设置为null,否则可能导致清理困难。 3. **谨慎使用全局ThreadLocal**:全局的ThreadLocal变量可能导致数据在不同线程间意外共享,应谨慎使用。 4. **注意线程池中的...

    threadLocal

    2. 并发编程:ThreadLocal是解决并发问题的一种策略,它提供了一种避免共享状态的方式,减少了锁的使用。 3. 内存管理:了解Java的内存模型和垃圾回收机制,才能理解ThreadLocal的内存泄漏风险和弱引用的作用。 4. ...

    事务的封装和Threadlocal实例

    private static final ThreadLocal&lt;Connection&gt; connectionHolder = new ThreadLocal(); public static void setConnection(Connection conn) { connectionHolder.set(conn); } public static Connection get...

Global site tag (gtag.js) - Google Analytics