文档章节

Spring和ThreadLocal

echola
 echola
发布于 2016/04/13 14:12
字数 361
阅读 410
收藏 4

在spring-framework的源码中,搜索了一下ThreadLocal,发现了如下结果,大家在阅读源码的时候,也可以使用这种方式,最起码,对一个类,一个方法的使用有更深的理解。

输入图片说明

ThreadLocal到底有什么好处呢?

package com.lingdian.spring.test;


public class ThreadLocalTest implements Runnable{

	ThreadLocal<Integer> num2 = new ThreadLocal<Integer>();
	Integer num = 0;
	@Override
	public void run() {
		for(int i=0;i<10;i++){
			addNum2();
			addNum();
			System.out.println(Thread.currentThread().getName()+"[num:"+num+" num2:"+num2.get());
		}
	}
	void addNum2(){
		if(num2.get()==null){
			num2.set(0);
		}
		int m = num2.get().intValue();
		m++;
		num2.set(m);
	}
	void addNum(){
		 num++;
	}

	public static void main(String[] args) {
		ThreadLocalTest threadLocal1 = new ThreadLocalTest();
		new Thread(threadLocal1).start();
		new Thread(threadLocal1).start();
	}
	
}

打印结果:

Thread-1[num:2 num2:1
Thread-0[num:2 num2:1
Thread-0[num:4 num2:2
Thread-0[num:5 num2:3
Thread-1[num:3 num2:2
Thread-0[num:6 num2:4
Thread-0[num:8 num2:5
Thread-0[num:9 num2:6
Thread-0[num:10 num2:7
Thread-1[num:7 num2:3
Thread-0[num:11 num2:8
Thread-0[num:13 num2:9
Thread-0[num:14 num2:10
Thread-1[num:12 num2:4
Thread-1[num:15 num2:5
Thread-1[num:16 num2:6
Thread-1[num:17 num2:7
Thread-1[num:18 num2:8
Thread-1[num:19 num2:9
Thread-1[num:20 num2:10

从代码运行的结果可以看到变量num在Thread-0和Thread-1中被共享了。但是num2却没有。

© 著作权归作者所有

共有 人打赏支持
echola
粉丝 13
博文 23
码字总数 12268
作品 0
西安
程序员
【小马哥】Spring Boot系列讲座

这里为大家推荐一个不错的Spring Boot系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施、...

杜琪
03/02
0
0
【小马哥】Spring Cloud系列讲座

这里为大家推荐一个不错的Spring Cloud系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施...

杜琪
03/02
0
0
对JDBC的支持 之 7.1 概述

概述 JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection co...

heroShane
2014/02/27
0
0
Spring MVC 使用 JNDI 配置的DataSource

稍微看了下,Spring 中JNDI 的使用,弄了个小例子。有很多不完备的地方,以后慢慢看,再改吧。 <一> 技术使用 Spring MVC JDBC Template Maven JNDI <二> 一些配置 Maven POM 配置 spring-c...

平江夜弹
2015/06/29
0
0
什么是Kotlin?Java的替代语言?

什么是Kotlin Kotlin是一个基于JVM的新的编程语言,2010年由IntelliJ IDEA所在的JetBrains公司开发,自2012年以来一直开源。 Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没...

java技术栈
2017/10/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

获取多个集合列表的笛卡尔积

获取多个集合笛卡尔积 电商中典型业务场景:商品搜索 单属性属性值之间为并查询 不同属性的属性值之间查询为与查询 import java.util.ArrayList;import java.util.List;/** * Created w...

键走偏锋
11分钟前
0
0
echarts 迁移地图 控制鼠标缩放大小比例

在网上找了好久没有找到解决方式,还是重新看了一下文档,终于找到的解决方案, zoom:1, //默认显示级别 scaleLimit:{min:1,max:3}, // 缩放级别 echarts 文档-配置项链接 http://echarts.b...

心驰
15分钟前
0
0
Boot2Docker ISO is out-of-date,

Boot2Docker ISO is out-of-date, downloading the latest release. 使用docker-machine时无法更新Boot2Docker ISO导致创建vm machine失败 解决方法:关闭网络,创建好之后再开启...

writeademo
23分钟前
0
0
在 Tomcat 中设置 Tapestry 框架的 html 热加载

如果开发中使用到了 Tapestry 这个框架,如果事先没有设置过的话,开发的时候 html 是不会热加载的,也就是说修改了 html 文件,不能刷新浏览器后立马看到修改完的效果,必须先重新启动应用服...

LeoXu
45分钟前
0
0
【微服务】开启巨石应用到微服务的探索

背景 在过去的一年时间里,我一直在从事一件事情,将现有的单体应用(巨石应用)向微服务改造。 接下来,将持续整理一些在微服务路上的学习与成长。 为什么要做微服务 单体应用,开发、部署简...

艳沐石
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部