- 浏览: 1364389 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (287)
- oracle (30)
- Java (73)
- MySQL (16)
- Myeclipse/eclipse (12)
- javascript (15)
- JSP/Servlet (7)
- maven (14)
- AJAX (2)
- JQuery (9)
- tomcat (8)
- spring (21)
- Linux (28)
- PHP (9)
- UI (1)
- 编程错误及处理 (38)
- 多线程 (18)
- hibernate (10)
- Web Service (3)
- struts2 (6)
- log4j (3)
- SVN (4)
- DWR (1)
- lucene (1)
- 正则表达式 (4)
- jstl (2)
- SSL (3)
- POI (1)
- 网络编程 (1)
- 算法 (2)
- xml (4)
- 加密解密 (1)
- IO (7)
- jetty (2)
- 存储过程 (1)
- SQL Server (1)
- MongoDB (1)
- mybatis (1)
- ETL (1)
- Zookeeper (1)
- Hadoop (5)
- Redis (1)
- spring cloud (1)
最新评论
-
ron.luo:
牛逼,正解!
maven设定项目编码 -
lichaoqun:
java.sql.SQLException: Can't call commit when autocommit=true -
Xujian0000abcd:
Thanks...
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the clas -
renyuan2ni:
[i][b][u]引用[list]
[*][img][flas ...
Manual close is not allowed over a Spring managed SqlSession -
851228082:
宋建勇 写道851228082 写道<!-- 文件拷贝时 ...
maven设定项目编码
/** * ThreadLocalShareData.java * cn.com.songjy.test.socket.thread * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-8-16 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy.test.socket.thread; import java.util.Random; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * ClassName:ThreadLocalShareData * ThreadLocal类及应用技巧 * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-8-16 下午4:14:56 */ public class ThreadLocalShareData { private static Log log = LogFactory.getLog(ThreadLocalShareData.class); private static ThreadLocal<Integer> thread_data = new ThreadLocal<Integer>(); //多个变量要求在线程范围内共享可以封装到一个对象中进行存储 private static ThreadLocal<MyThreadScopeData> my_thread_data = new ThreadLocal<MyThreadScopeData>(); private static int data; public static void main(String[] args) { for(int i=0; i<5; i++) new Thread(new Runnable() { @Override public void run() { data = new Random().nextInt(); int data = new Random().nextInt(); log.info(Thread.currentThread().getName() + " has put data :" + data); //thread_data.put(Thread.currentThread(), data); thread_data.set(data); //my_thread_data.set(new MyThreadScopeData(""+data, 12)); MyThreadScopeData.getInstance().setName("name-"+data); MyThreadScopeData.getInstance().setAge(data); new A().get(); new B().get(); } }).start(); } static class A { public void get(){ //int data = thread_data.get(Thread.currentThread()); int data = thread_data.get(); //MyThreadScopeData my = my_thread_data.get(); MyThreadScopeData my = MyThreadScopeData.getInstance(); log.info("A from " + Thread.currentThread().getName() + " get data :" + data); log.info("A from " + Thread.currentThread().getName() + " get MyThreadScopeData :" + my.getName()); } } static class B { public void get(){ //int data = thread_data.get(Thread.currentThread()); int data = thread_data.get(); //MyThreadScopeData my = my_thread_data.get(); MyThreadScopeData my = MyThreadScopeData.getInstance(); log.info("B from " + Thread.currentThread().getName() + " get data :" + data); log.info("B from " + Thread.currentThread().getName() + " get MyThreadScopeData :" + my.getName()); } } } //该类被编写成了线程范围内共享的数据类 class MyThreadScopeData { private MyThreadScopeData(){} /*单例之饱汉模式 private static MyThreadScopeData instance = new MyThreadScopeData(); public static synchronized MyThreadScopeData getInstance(){ return instance; }*/ /*单例之饿汉模式 private static MyThreadScopeData instance = null; public static synchronized MyThreadScopeData getInstance(){ if(null == instance) instance = new MyThreadScopeData(); return instance; }*/ /*线程范围内共享模式*/ public static MyThreadScopeData getInstance(){ MyThreadScopeData instance = map.get(); if(null == instance) { instance = new MyThreadScopeData(); map.set(instance); } //return map.get();//也可 return instance; } private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>(); private String name; private int age; /*MyThreadScopeData(String name, int age){ this.name = name; this.age = age; }*/ public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
引自
http://down.51cto.com/data/443416
发表评论
-
java.io.NotSerializableException: java.util.ArrayList$SubList
2016-03-15 11:36 2785错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1078在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 633错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 853一、自定义类加载器代码: package foo; im ... -
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
2014-04-29 13:03 19495看到一个博客,如下 Jav ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1109项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1551/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3619package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3528一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 754Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1048package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1007package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2369项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4052package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 648package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 755package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1051package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1318package cn.com.songjy.test.sock ... -
jdk1.5读写锁技术的妙用
2013-08-19 22:00 1354/** * ReadWriteLockTest.java ... -
jdk1.5的线程锁技术
2013-08-19 20:25 926/** * LockTest.java * cn.co ...
相关推荐
资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统...06ThreadLocal类及应用技巧【】06ThreadLocal类及应 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
Java并发编程:ThreadLocal、Java内存模型、锁、并发工具类、线程池等;JVM(Java虚拟机):Java内存管理详解、垃圾回收机制、垃圾回收器等;MySQL:基础知识、存储引擎、日志、SQL优化、数据索引、锁、事务、高可用...
掌握页面开发技术javasciprt的基本应用 掌握Ajax技术原理 掌握Tomcat链接池的配置 熟悉JFreechart的运用 了解验证码技术 熟悉上传组件的运用 掌握动态代理原理 掌握ThreadLocal原理 掌握常用的GoF和J2EE设计模式 ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
│ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...
1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发...
(第七天)之漫谈使用ThreadLocal改进你的层次的划分 (第八天)之weblogic与apache的整合与调优 (第九天)之weblogic的集群与配置 (第十天)之Axis2 Web Service(一) (第十一天)之Axis2 Web Service(二) (第十...