`
dannyhz
  • 浏览: 369026 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

threadlocal 的例子 自己写的(2)

 
阅读更多
引用

1. 用Processor ,这个类有一个变量 localVal是 threadLocal 变量, 在两个thread作用下,会把这个变量在自己的线程内分别复制一份,这样不会有累计加一的情况发生, 只会把locaVal在两个方法内进行自己的加一动作 。

2. 用Processor2 , 这个类的变量localVal 是一个Integer类型的,而作为资源传入的Processor2对象, 因为没用使用threadLocal的方式, 所以这个变量被两个线程共享, 会被加两次。




package com.ssc.dbcttool.test;


public class PatternExec {
	
	public static void main(String[] args) {
		Exec onlyOne = new Processor();
		//Exec onlyOne = new Processor2();
		
		Thread t1 = new DoThingThread(onlyOne);
		Thread t2 = new DoThingThread(onlyOne);
			
		t1.start();
		t2.start();
		
	}

	
	
}

class DoThingThread extends Thread{
	
	private Exec only;
	
	public DoThingThread(Exec onlyOne){
		only = onlyOne;
	}
	
	@Override
	public void run() {
		
		only.firstActionToPrepare().secondAction();
		
	}
	
}







package com.ssc.dbcttool.test;

public interface Exec {
	public Exec firstActionToPrepare();
	
	public void secondAction();
}




package com.ssc.dbcttool.test;

public class Processor implements Exec{
	
	private ThreadLocal<Integer> localVal = new ThreadLocal<Integer>();
	
	
	public Exec firstActionToPrepare(){
		if(localVal.get()!=null){
			Integer oldVal = localVal.get();
			localVal.set(Integer.valueOf(oldVal.intValue() + 1));
		}else{
			localVal.set(Integer.valueOf(1));
		}
		
		return this;
	}
	
	public void secondAction(){
		System.out.println(localVal.get());
	}
}



package com.ssc.dbcttool.test;

public class Processor2 implements Exec{
	
	private Integer localVal = new Integer(0);
	
	
	public Exec firstActionToPrepare(){
		
		localVal++;
		
		return this;
	}
	
	public void secondAction(){
		System.out.println(localVal);
	}
}



分享到:
评论

相关推荐

    ThreadLocal应用示例及理解

    ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。

    java 简单的ThreadLocal示例

    java 简单的ThreadLocal示例

    线程ThreadLocal机制实现例子

    本例以序列号生成的程序为例,展示ThreadLocal的使用

    ThreadLocal

    应用ThreadLocal进行多线程处理,经典小例子。可运行。

    Android 详解ThreadLocal及InheritableThreadLocal

    Android 详解ThreadLocal及InheritableThreadLocal 概要: 因为在android中经常用到handler来处理异步任务,通常用于接收消息,来操作UIThread,其中提到涉及到的looper对象... 首先来看下Threadlocal的简单例子:  

    深入理解ThreadLocal工作原理及使用示例

    主要介绍了深入理解ThreadLocal工作原理及使用示例,涉及ThreadLocal&lt;T&gt; 简介和使用示例及ThreadLocal的原理等相关内容,具有一定参考价值,需要的朋友可以了解下。

    Java多线程编程中ThreadLocal类的用法及深入

    ThreadLocal,直译为“线程本地”...其实它还是挺有用的,不相信的话,我们一起来看看这个例子吧。 一个序列号生成器的程序,可能同时会有多个线程并发访问它,要保证每个线程得到的序列号都是自增的,而不能相互干扰。

    java线程详解

    Java线程:概念与原理 Java线程:创建与启动 Java线程:线程状态的转换 Java线程:线程的同步与锁 一、同步问题提出 二、同步和锁定 ...三、自己实现个ThreadLocal 四、透过现象看本质 Java线程:大总结

    java8源码-JavaInterview-5:java中高级面试指南

    写一个例子 () volitile的工作原理 () () Thread and lock () cas知道吗?如何实现? () () 四种写法,写一个单例模式 () () () Integer x= 5, int y=5 比较x==y有哪些步骤 () javaCore () () 动态代理 () () () NIO...

    java随机数

    一个简单的例子:从0.0到1.0之间可以生成一个双精度浮点数。那么通过上面的信息,开发人员要产生0.0和10.0之间的双精度浮点数会这样来写: 1.Math.random() * 10 而产生0和10之间的整数,则会写成: 1.Math.round...

    leetcodelrucache-algorithm:算法学习和练习

    jdk.threadlocal DateFormatService: 如何线程安全的使用 SimpleDateFormat jdk.volatilex VolatileArrays: volatile 例子 jdk.collection.union JDK: javaAPI 方式 取得集合的交并集 (或者apache的API) large...

    Spring 2.0 开发参考手册

    14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7...

    spring chm文档

    14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7...

    Spring.3.x企业应用开发实战(完整版).part2

    7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.5.2. 了解自己 3.5.2.1. BeanFactoryAware 3.5.2.2. BeanNameAware 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. ...

    Spring3.x企业应用开发实战(完整版) part1

    7.3.2 一个简单的例子 7.3.3 如何通过配置使用@AspectJ切面 7.4 @AspectJ语法基础 7.4.1 切点表达式函数 7.4.2 在函数入参中使用通配符 7.4.3 逻辑运算符 7.4.4 不同增强类型 7.4.5 引介增强用法 7.5 切点函数详解 ...

    Spring API

    3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ...

    Spring中文帮助文档

    3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段05讲、一个解释volatile关键字作用最好的例子.mp4 │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │ 高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段05讲、一个解释volatile关键字作用最好的例子.mp4 │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │ 高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速...

Global site tag (gtag.js) - Google Analytics