`
wode66
  • 浏览: 743960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java并发编程--ThreadLocal的用法和分析

阅读更多

ThreadLocal这个类,理解起来比较简单,但是使用时,还是需要一些技巧的,简单介绍如下:

 

例子1:threadLocal变量一般用法

 

package concurrent.thread;

/**
 * 技巧:
 * 		1.在当前线程里执行threadLocal.set(value) 相当于 currentThread.threadLocalMap.set(threadLocal,value)。
 * 			即:每个线程均含有一个threadLocalMap变量,该变量由ThreadLocal维护。
 * 		2.ThreadLocal变量一般使用private static修饰。
 */
public class ThreadLocalDemo_step0 {

	private static ThreadLocal<String> myData = new ThreadLocal<String>();

	public static void main(String[] args) {
		Thread t1 = new Thread(new Runnable(){
			public void run() {
				System.out.println("Thread " + Thread.currentThread().getName() + "[begin] has " + myData.get());
				myData.set("t1");
				System.out.println("Thread " + Thread.currentThread().getName() + "[end] has " + myData.get());
			}
		});
		Thread t2 = new Thread(new Runnable(){
			public void run() {
				System.out.println("Thread " + Thread.currentThread().getName() + "[begin] has " + myData.get());
				myData.set("t2");
				System.out.println("Thread " + Thread.currentThread().getName() + "[end] has " + myData.get());
			}
		});
		t1.start();
		t2.start();
	}
}
 

 

例子2:threadLocal变量的简单封装用法(重要)

 

package concurrent.thread;

/**
 * 技巧:
 * 		3.如果希望线程局部变量初始化其它值,那么需要自己实现ThreadLocal的子类并重写initialValue()方法,
 * 		通常使用一个内部匿名类对ThreadLocal进行子类化.比如下面的例子,SerialNum类为每一个类分配一个序号:
 */
public class ThreadLocalDemo_step1 {

	public static void main(String[] args) {
		Thread t1 = new Thread(new Runnable(){
			public void run() {
				System.out.println("Thread " + Thread.currentThread().getName() + " has " + SerialNum.get());
			}
		});
		Thread t2 = new Thread(new Runnable(){
			public void run() {
				System.out.println("Thread " + Thread.currentThread().getName() + " has " + SerialNum.get());
			}
		});
		t1.start();
		t2.start();
	}
	
	//技巧:对threadLocal变量进行简单封装,可以简化多线程操作
	static class SerialNum {   
	     // The next serial number to be assigned   
	     private static int nextSerialNum = 0;   
	    
	     private static ThreadLocal serialNum = new ThreadLocal() {   
	         protected synchronized Object initialValue() {   
	             return new Integer(nextSerialNum++);   
	         }   
	     };   
	    
	     public static int get() {   
	         return ((Integer) (serialNum.get())).intValue();   
	     }   
	 }   

	
}
 

 

 

参考文献:

 

http://my.oschina.net/ITBoy/blog/17190 java类ThreadLocal的理解

http://www.iteye.com/topic/103804 正确理解ThreadLocal

 

分享到:
评论

相关推荐

    java并发编程-从入门到精通

    总之,“java并发编程-从入门到精通”这个文档会覆盖以上所有内容,并可能深入讲解更多高级主题,如原子类(Atomic*)、线程局部变量(ThreadLocal)、中断线程机制以及死锁预防等。通过学习这份文档,你将能够熟练...

    Java并发编程-线程安全与基础构建模块

    本文将深入探讨"Java并发编程-线程安全与基础构建模块"这一主题,旨在帮助开发者理解如何有效地处理并发问题,提高程序性能和稳定性。 首先,线程安全是并发编程中的核心概念,指的是多个线程访问同一资源时,无论...

    java并发编程书籍

    Java并发编程是软件开发中的一个关键领域,尤其是在大型企业级应用和分布式系统中。通过学习相关的书籍,开发者可以深入理解如何有效地设计和实现高效的多线程应用程序,避免并发问题,如竞态条件、死锁、活锁等。...

    JAVA并发编程实践-中文-高清-带书签-完整版

    《JAVA并发编程实践》是一本深入探讨Java多线程编程技术的专业书籍,旨在帮助开发者理解和掌握在Java平台上进行高效并发编程的关键知识。本书涵盖了从基本概念到高级特性的全面内容,是Java程序员进阶的必读之作。 ...

    Java并发编程学习之ThreadLocal源码详析

    Java并发编程学习之ThreadLocal源码详析 ThreadLocal是Java并发编程中的一种机制,用于解决多线程访问共享变量的问题。它可以使每个线程对共享变量的访问都是线程安全的,使得多线程编程变得更加简单。 ...

    Java并发编程实践.pdf

    ### Java并发编程实践 #### 一、并发编程基础 ##### 1.1 并发与并行的区别 ...通过上述知识点的学习,我们可以更好地理解和掌握Java并发编程的基本原理和技巧,为开发高效稳定的并发应用程序打下坚实的基础。

    java并发编程

    Java并发编程是Java开发者必须掌握的关键技能之一,它涉及到如何在多线程环境中高效、安全地执行程序。并发编程能够充分利用多核处理器的计算能力,提高应用程序的响应速度和整体性能。《Java编程并发实战》这本书是...

    JAVA并发编程实践

    根据给定文件的信息“JAVA并发编程实践”以及其描述为“Java并发学习资料”,我们可以从中提炼出关于Java并发编程的一些核心知识点。Java并发编程是Java高级特性之一,它允许开发者编写能够同时执行多个任务的程序,...

    JAVA并发-自问自答学ThreadLocal.pdf

    在Java的并发编程中,ThreadLocal是一个非常重要的概念,它可以帮助我们创建独立于线程的变量副本,避免了在多线程共享数据时可能出现的竞态条件。 1. **ThreadLocal的工作原理**: - 每个ThreadLocal实例都会为每...

    Java并发编程实战

    5.4 阻塞方法与中断方法 5.5 同步工具类 5.5.1 闭锁 5.5.2 FutureTask 5.5.3 信号量 5.5.4 栅栏 5.6 构建高效且可伸缩的结果缓存 第二部分 结构化并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.1.1...

    java并发编程艺术

    《Java并发编程艺术》这本书是Java开发者深入理解多线程编程的重要参考资料。它全面而深入地探讨了Java平台上的并发编程技术,对于提升程序性能、优化系统资源利用以及解决多线程环境中的复杂问题有着极大的帮助。...

    java并发编程经典书籍(英文版)

    Java并发编程是Java开发者必须掌握的关键技能之一,尤其是在多核处理器和分布式系统广泛使用的今天。以下是对标题和描述中提及的两本经典书籍——《Concurrent Programming in Java》和《Java Concurrency in ...

    Java并发编程中ThreadLocal的原理与应用分析

    内容概要:本文深入解析了Java中的ThreadLocal工具类,包括其常见应用场景及其原理和源码分析。通过Demo示例介绍了如何利用ThreadLocal实现线程间的隔离,使各个线程可以拥有独立的变量副本而不互相干扰。文章详细...

    java并发编程1-9章

    《Java并发编程1-9章》是一份涵盖了Java并发编程核心知识的资料集合,主要源自博客作者Yishizhu在iteye上的分享。通过阅读这些章节,我们可以深入了解Java平台上的多线程和并发处理机制,这对于任何需要处理高性能、...

    java 并发编程实践

    本篇文章将深入探讨Java并发编程的相关知识点,主要基于提供的两个文件——"Java并发编程实战(中文版).pdf"和"Java Concurrency in Practice.pdf"。 1. **线程与并发** - **线程基础**:Java中的线程是并发执行...

    java并发编程.docx

    Java并发编程是Java开发中的重要领域,涉及到多...总结来说,Java并发编程通过线程池管理和ThreadLocal机制,提供了高效且安全的多线程环境。理解并熟练掌握这些概念和技术,对于编写高性能的Java应用程序至关重要。

    Java并发编程实践-电子书-02章

    总之,线程安全是Java并发编程的核心,涉及理解和应用各种同步和活性策略,以确保在多线程环境中数据的一致性和程序的稳定性。通过对上述概念和技术的深入掌握,开发者可以有效地构建和维护高性能、高可靠性的并发...

Global site tag (gtag.js) - Google Analytics