`
hy2012_campus
  • 浏览: 30587 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

ThreadLocal变量

    博客分类:
  • java
 
阅读更多
/**
 * ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。 
 * ThreadLocal为每一个线程提供一个独立的变量副本,从而隔离了多个线程对访问数据的冲突。
 */
public class SequenceNumber {
    
    //①通过匿名内部类覆盖ThreadLocal的initialValue()方法,指定初始值
	private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){
		public Integer initialValue(){
			return 0;
		}
	};
 
    //②获取下一个序列值
	public int getNextNum(){
		seqNum.set(seqNum.get()+1);
		return seqNum.get();
	}

	public static void main(String[ ] args) {
	     SequenceNumber sn = new SequenceNumber();
	     //③ 3个线程共享sn,各自产生序列号
	     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(){
	        //④每个线程打出3个序列值
			for (int i = 0; i < 3; i++) {
				System.out.println("thread["+Thread.currentThread().getName()+"] sn["+sn.getNextNum()+"]");
			}
		}
	}
}

 

分享到:
评论

相关推荐

    Java并发编实践之ThreadLocal变量.doc

    Java并发编程实践中,ThreadLocal变量是一个非常重要的工具,它在JDK1.2版本就已经引入。ThreadLocal不是代表一个线程实例,而是一种线程局部变量的机制,它为每个线程提供了一个独立的变量副本,各个线程可以独立地...

    ThreadLocal相关

    在多线程环境下,ThreadLocal 变量可以保证各个线程的变量相对独立于其他线程内的变量。这种机制可以帮助开发者在多线程环境下编写更加简洁、可维护的代码。 ThreadLocal 的作用 ThreadLocal 的主要作用是提供线程...

    ThreadLocal应用示例及理解

    在ThreadLocal中,`set()`方法用于设置当前线程的ThreadLocal变量值,`get()`方法用于获取当前线程的ThreadLocal变量值。 ```java threadLocal.set("Hello, ThreadLocal"); String value = threadLocal.get(); ``` ...

    Java中ThreadLocal的设计与使用

    由于ThreadLocal变量是存储在线程的ThreadLocalMap中,如果线程长时间运行并且不清理ThreadLocal,当ThreadLocal对象被垃圾收集时,其在ThreadLocalMap中的引用将变为"幽灵引用"(弱引用),导致内存泄漏。...

    ThreadLocal的用处

    这意味着不同线程可以同时拥有相同ThreadLocal变量的不同实例,互不影响。 2. **创建和访问变量**: 创建ThreadLocal变量非常简单,只需定义一个ThreadLocal类型的实例即可。例如: ```java ThreadLocal&lt;String&gt;...

    JAVA ThreadLocal类深入

    在不再需要ThreadLocal变量时,调用remove()方法可以清除线程的副本,以减少内存占用。 ### 二、ThreadLocal API详解 1. `ThreadLocal()`:创建一个新的线程局部变量。 2. `T get()`:返回当前线程的ThreadLocal...

    ThreadLocal测试工程

    但是,如果线程内部对ThreadLocal变量的修改可能会影响其他线程(例如,通过返回ThreadLocal变量的引用),那么需要额外的同步措施。 6. **代码示例**: ```java public class ThreadLocalExample { private ...

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

    - **弱引用**:ThreadLocalMap的键使用的是弱引用,当ThreadLocal变量不再被引用时,垃圾收集器可以回收ThreadLocal对象,但其在ThreadLocalMap中的引用不会立即被移除,以防止导致内存泄漏。 - **线程生命周期**:...

    ThreadLocal

    - 不适用于跨线程通信:ThreadLocal只保证同一线程内的数据隔离,不同线程间无法共享ThreadLocal变量。 - 不是线程安全的:尽管ThreadLocal提供了线程隔离,但它本身并不保证线程安全性,如果在`set`和`get`操作之间...

    ThreadLocal_ThreadLocal源码分析_

    这意味着每个线程都有自己的ThreadLocal变量,互不干扰,提供了线程安全的数据存储方式。ThreadLocal通常用于在多线程环境下为每个线程提供一个单独的实例,比如作为线程上下文的存储。 **ThreadLocal内部结构** ...

    ThreadLocal 线程本地变量 及 源码分析.rar_开发_设计

    - 控制并发:例如在Servlet容器中,每个请求可以分配一个ThreadLocal变量,存储请求特有的数据。 - 容器内部使用:例如Spring框架中的TransactionTemplate就是利用ThreadLocal来管理事务的。 以上是对ThreadLocal...

    ThreadLocal的几种误区

    在服务器端,线程池的存在可能导致多个用户的请求被分配到同一个线程处理,因此,如果不注意清理,ThreadLocal变量可能会被不同用户访问到,造成数据泄露。 误区三:每个用户访问会有新的ThreadLocal 理论上来讲,...

    java并发包源码分析(3)ThreadLocal

    每个线程内部都有一个ThreadLocalMap对象,这个对象实际上是一个Map结构,存储了当前线程的ThreadLocal变量以及其对应的值。ThreadLocalMap是ThreadLocal的内部类,它使用Entry数组来存储数据,而Entry是...

    使用Java ThreadLocal.docx

    首先,让我们来看看如何创建一个ThreadLocal变量。创建ThreadLocal变量非常简单,只需实例化ThreadLocal类即可,如下所示: ```java private ThreadLocal&lt;String&gt; myThreadLocal = new ThreadLocal(); ``` 这里的`...

    通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分

    每个线程都有其独立的ThreadLocal变量副本,这样每个线程都可以独立地修改自己的副本而不影响其他线程。这有助于避免并发问题,提高代码的可读性和可维护性。 ThreadLocal主要提供了四个核心方法: 1. `set(Object...

    使用ThreadLocal管理“session”数据

    而ThreadLocal提供了一个线程局部的存储空间,每个线程都有自己的ThreadLocal变量副本,互不影响。因此,使用ThreadLocal可以在多线程环境下保证session数据的安全性,避免了同步锁带来的性能开销。 3. **如何使用...

    InheritableThreadLocal & ThreadLocal

    当我们创建一个ThreadLocal实例时,实际上是创建了一个全局的键值对存储,这个存储空间与线程相关联,每个线程有自己的独立副本,即使多个线程同时访问同一个ThreadLocal变量,也不会相互干扰。 二、...

Global site tag (gtag.js) - Google Analytics