`
flyPig
  • 浏览: 139849 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

多线程常用模式总结三

    博客分类:
  • Java
阅读更多
9.线程变量ThreadLocal
ThreadLocal是一个线程局部变量,为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种的线程绑定机制。每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出现的并发访问问题提供了一种隔离机制。这样的结果是耗费了内存,但是大大减少了线程同步所带来性能消耗,也减少了线程并发控制的复杂度。
可以看出来,ThreadLocal跟Synchronized真好相反,一个用于隔离,一个用于共享。
如下的程序可以看出,不同的线程之间的People对象是独立的。
public class ThreadLocalDemo implements Runnable {
	private final static ThreadLocal<People> peopleLocal = new ThreadLocal<People>();

	public static void main(String[] agrs) {
		ThreadLocalDemo td = new ThreadLocalDemo();
		Thread t1 = new Thread(td, "a");
		Thread t2 = new Thread(td, "b");
		t1.start();
		t2.start();
	}

	public void run() {
		accesspeople();
	}

	/**
	 * 示例业务方法
	 */
	public void accesspeople() {
		// 获取当前线程的名字
		String currentThreadName = Thread.currentThread().getName();
		System.out.println(currentThreadName + " is running!");
		// 产生一个随机数并打印
		Random random = new Random();
		int age = random.nextInt(100);
		System.out
				.println("thread " + currentThreadName + " set age to:" + age);
		// 获取一个people对象,并将随机数年龄插入到对象属性中
		People people = getPeople();
		people.setAge(age);
		System.out.println("thread " + currentThreadName
				+ " first read age is:" + people.getAge());
		try {
			Thread.sleep(500);
		} catch (InterruptedException ie) {
			ie.printStackTrace();
		}
		System.out.println("thread " + currentThreadName
				+ " second read age is:" + people.getAge());
	}

	protected People getPeople() {
		// 获取本地线程变量并强制转换为people类型
		People people = peopleLocal.get();
		// 线程首次执行此方法的时候,peopleLocal.get()肯定为null
		if (people == null) {
			// 创建一个people对象,并保存到本地线程变量peopleLocal中
			people = new People();
			peopleLocal.set(people);
		}
		return people;
	}

	private class People {
		private int age = 0; // 年龄

		public int getAge() {
			return this.age;
		}

		public void setAge(int age) {
			this.age = age;
		}
	}
}


10.主动对象Active Object
待续
分享到:
评论

相关推荐

    多线程单例模式并发访问

    总结起来,多线程环境下的单例模式实现需要注意线程安全问题,尤其是懒汉式单例,需要采取适当的同步措施来防止多线程环境下的实例化问题。此外,对于不同场景的需求,可以选择不同的实现方式来优化性能和资源使用。

    多线程基础总结.xmind

    多线程基础理论, 多线程中常用API,多线程的实现方式, 线程池以及创建线程池相关API, 常见的设计模式等内容

    JAVA多线程设计模式详解

    1. 单例模式:在多线程环境中保证单例对象的唯一性,常用双检锁/双重校验锁定(DCL)和静态内部类等方式实现。 2. 生产者-消费者模式:通过阻塞队列实现生产者线程和消费者线程之间的数据交换,利用BlockingQueue...

    Java 多线程 设计模式

    以上只是Java多线程设计模式的一些基本概念和常用技术,实际开发中还需要根据具体需求灵活运用,结合设计模式来解决问题。《Java 多线程设计模式》一书的源代码应该涵盖了这些知识点的具体实现,通过阅读和实践,...

    java多线程设计模式详解PDF及源码

    设计模式则是解决软件开发中常见问题的经验总结,它为多线程环境下的编程提供了有效的解决方案。本资源包括了详细的“Java多线程设计模式详解”PDF文档以及配套的源码,帮助开发者深入理解和应用这些模式。 首先,...

    java中常用设计模式总结心得

    以下是对Java中常用设计模式的详细解释: 1. **单例模式**:单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于配置管理、线程池或者数据库连接池等场景。实现方式有懒汉式(线程不安全)、...

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    多线程服务器的几种常用模型

    ### 多线程服务器的几种常用模型 #### 1. 进程与线程 在计算机科学中,**进程**和**线程**是两个重要的概念。进程是资源分配的基本单位,而线程则是调度的基本单位。每个进程都有自己的独立地址空间,这意味着不同...

    多核多线程下java设计模式性能提升.pdf

    总结来说,本文档通过介绍单例模式在多核多线程环境下的性能提升方法,探讨了Java设计模式在现代大型系统应用中的优化策略,并对JDK未来的设计模式实现提出期望,为Java开发人员提供了宝贵的技术指导和参考。

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    Java 多线程学习总结6

    在“Java多线程学习总结6”这个主题中,我们可以深入探讨Java多线程的实现、管理及优化。下面将详细阐述相关知识点。 1. **线程的创建方式** - **继承Thread类**:自定义类继承Thread类,并重写run()方法,创建...

    多线程编程指南

    提供了一个包含多线程编程中常用术语的词汇表,方便读者查阅。 #### 结束语 本指南详细介绍了多线程编程在iOS开发中的应用,希望读者能够从中受益,并在实际项目中有效地运用多线程技术。 #### 推荐资源 最后,...

    ios 多线程编程指南

    对于一些常用的框架,如Foundation Framework、ApplicationKit和CoreData,Apple提供了线程安全的总结,指导开发者如何在这些框架内安全地使用多线程。 以上就是iOS多线程编程指南的主要知识点,详细解读了多线程...

    java 多线程单例模式详解

    ### Java多线程单例模式详解 #### 一、单例模式概述 单例模式(Singleton Pattern)是一种常用的软件设计模式,它确保一个类仅有一个实例,并提供一个全局访问点。这种模式通常用于那些需要频繁实例化然后销毁的...

    多线程,多接收模式串口类LsComm

    总结,LsComm是串口通信领域的强大工具,通过多线程和多接收模式,它为开发者提供了高效、灵活的解决方案。无论是在传统的VC6环境中还是更新的VC7环境下,LsComm都能发挥出色的表现,简化串口通信的实现,提高软件的...

    支持多线程AC自动机

    总结来说,支持多线程AC自动机的Snort改进版是一种高效的方法,它结合了AC自动机的快速搜索能力和多线程的并发处理能力,旨在提高网络入侵检测系统的性能和响应速度,对于应对现代网络安全挑战具有重要意义。

    Java多线程技术

    在多线程编程中,常用的设计模式有生产者-消费者模式、读写锁模式等。 10. 多线程工具类:Java提供了诸如Timer、ScheduledExecutorService等工具类,它们能够帮助开发者更方便地进行时间安排、任务调度等操作。 ...

    几种常用的设计模式介绍总结

    单例模式是一种常用的创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。单例模式通常用于控制资源的共享访问,例如数据库连接池、日志管理器等。 #### 实现方式 - **构造函数私有化**:防止外部...

Global site tag (gtag.js) - Google Analytics