- 浏览: 1379491 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (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 2862错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1230在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 675错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 886一、自定义类加载器代码: package foo; im ... -
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
2014-04-29 13:03 19573看到一个博客,如下 Jav ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1153项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1592/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3711package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3588一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 790Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1095package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1046package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2447项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4096package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 701package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 812package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1092package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1364package cn.com.songjy.test.sock ... -
jdk1.5读写锁技术的妙用
2013-08-19 22:00 1392/** * ReadWriteLockTest.java ... -
jdk1.5的线程锁技术
2013-08-19 20:25 962/** * LockTest.java * cn.co ...
相关推荐
资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统...06ThreadLocal类及应用技巧【】06ThreadLocal类及应 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
ThreadLocal类及应用技巧 - `ThreadLocal`类提供了一种线程局部变量的解决方案,可以为每个线程提供独立的变量副本。 ##### 7. 多个线程之间共享数据的方式探讨 - 可以通过显式锁、同步容器等手段来实现多个线程间...
### ThreadLocal详解:Java多线程中的线程局部变量 #### 重要概念解析:ThreadLocal在Java多线程中的角色 ...理解并掌握ThreadLocal的工作原理和使用技巧,对于Java开发者而言,是提高多线程编程水平的关键步骤之一。
4. 线程安全:了解并发编程中的volatile、Atomic类和ThreadLocal。 六、网络编程 1. Socket通信:理解TCP和UDP协议,以及Socket和ServerSocket类的使用。 2. HTTP协议:了解HTTP的基本原理,能实现简单的HTTP客户端...
ThreadTest.zip文件显然包含了关于Java多线程API的详细讲解和实例代码,重点关注了Thread类、ThreadLocal类以及Executors类。 首先,让我们深入理解Thread类。它是Java中代表独立执行线程的基本类。每个线程都有...
- 高亮个人在Java开发中的专长,如JVM优化、多线程、设计模式或框架应用等。 2. **个性优点**: - 候选人应分享他们认为有助于Java开发的优点,例如良好的逻辑思维、代码整洁性、团队合作精神、自我学习能力等。 ...
3. **并发编程**:理解线程、同步、锁机制,如synchronized、volatile、ThreadLocal,以及并发工具类如Semaphore、CountDownLatch等。 4. **异常处理**:了解异常分类,如何正确抛出和捕获异常,以及何时使用try-...
`ThreadLocal`类及应用技巧 - **功能**:提供线程局部变量,每个线程拥有独立的变量副本,避免了线程间的共享数据冲突。 - **应用**:适用于需要在线程间隔离数据的场景,例如数据库连接、用户会话等。 ##### 5. ...
5. **集合框架**:JAVA的集合框架包括List、Set、Map等接口及其实现类,理解它们的特性和应用场景,如ArrayList与LinkedList的区别,HashMap与ConcurrentHashMap的并发处理,以及如何使用泛型来提高代码安全性。...
`ThreadLocal`类则提供了一种方式,让每个线程都有其独立的变量副本,避免了线程间的共享状态问题。 总的来说,Java多线程编程是构建高性能、响应快速的应用程序的关键技术,理解并掌握其原理和实践技巧对于Java...
- ThreadLocal原理及应用场景 - 并发工具类:CountDownLatch、CyclicBarrier、Semaphore等 5. **Java IO/NIO** - 字节流、字符流的使用 - 文件操作 - 缓冲区、转换流 - NIO(New IO)的介绍,包括Channel、...
以下是一些基于给定内容的Java程序性能优化技巧: 1. **合理分配对象空间**: - 在创建对象时,了解并预估对象的大小非常重要。例如,当我们使用`Vector`时,默认构造函数会分配10个元素的空间。如果预先知道`...
7. **反射**:掌握Class类的使用,动态创建对象,获取和修改私有属性及方法。 8. **设计模式**:熟悉并能灵活运用单例、工厂、观察者、装饰器、代理等常见设计模式。 9. **JVM**:理解Java虚拟机的工作原理,包括...
Java提供了强大的多线程支持,面试中可能会涉及到线程的创建、同步、互斥、死锁等问题,以及ThreadLocal、volatile、synchronized、wait/notify等关键字的理解与应用。 四、JVM内存模型 深入理解JVM的工作原理,...
理解并发容器(如ConcurrentHashMap、CopyOnWriteArrayList)的使用,线程安全问题及解决方案,以及synchronized、volatile、ThreadLocal等关键字的用法。 5. **设计模式**:熟悉常见的23种设计模式,如工厂模式、...
- **并发编程**:了解线程的创建、同步机制,熟悉synchronized、volatile、ThreadLocal等概念。 - **集合框架**:深入理解List、Set、Map接口及其实现类,如ArrayList、LinkedList、HashMap、TreeMap等的内部工作...
### Java核心API需要掌握的程度 Java作为一种广泛应用的编程语言,其强大的功能很大程度上依赖于其...总之,Java核心API的学习是一个逐步深入的过程,从基本的类库到高级的应用技巧都需要不断积累经验才能真正掌握。
6. **并发编程的应用**:压缩包中的并发编程_应用.pdf可能包含了一些实际场景下如何运用线程同步的知识,比如在数据库操作、网络请求、高并发服务器设计等方面的应用。 7. **内存泄漏与弱引用**:在JUC-ThreadLocal...