- 浏览: 2271020 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (357)
- J2EE (49)
- JavaScript (40)
- Spring (19)
- Struts (5)
- CSS (8)
- Hibernate (16)
- Java (67)
- DWR (4)
- JSON (3)
- XFIRE (1)
- Tomcat (1)
- Ant (2)
- 设计模式 (2)
- 经典收藏 (2)
- JSP (10)
- Linux (0)
- WebLogic (11)
- myeclipse (13)
- Buffalo (4)
- 文件上传相关 (1)
- oracle (33)
- html (6)
- JSTL (3)
- SVN (2)
- GIT (1)
- 孙卫琴(Java网络编程精解) (1)
- DOM4J (2)
- Swing (1)
- AJAX (1)
- Eclipse (5)
- 日志组件 (3)
- PowerDesigner (1)
- Jquery (22)
- IT技术开发相关网址 (1)
- Nutz (1)
- 其它 (1)
- Velocity (3)
- WebService (1)
- MySql (2)
- Android (1)
- Maven (2)
- Quartz (11)
- Lucene (1)
- springsource (1)
- Junit (1)
- Activiti (0)
最新评论
-
yzlseu:
拼凑,没有营养
Activiti进阶—分配组任务 -
zhangsenhao:
非常赞!代码很清楚
SpringMVC3.0+MyIbatis3.0(分页示例) -
xiamw2000:
分页写得不对,应该是 : order by ${orderNa ...
SpringMVC3.0+MyIbatis3.0(分页示例) -
sheertewtw:
...
SpringMVC:上传与下载 -
kingtoon:
...
XSS之xssprotect
参考资料
1 深入研究java.lang.ThreadLocal类
http://lavasoft.blog.51cto.com/62575/51926
2 java中ThreadLocal类的使用
http://www.niwota.com/submsg/1551983/
3 Java ThreadLocal介绍
http://www.blogjava.net/Ericzhang5231/articles/JavaThreadlocal.html
4 Java中ThreadLocal的设计与使用
http://www.yesky.com/266/1882766.shtml
一 ThreadLocal介绍
ThreadLocal是Thread local variable(线程局部变量),为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量.
二 ThreadLocal与synchronized的区别
ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题
Synchronized用于在多个线程间通信时能够获得数据共享,它利用锁的机制,使变量或代码块在某一时该只能被一个线程访问,采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问,编写比ThreadLocal更加复杂。
ThreadLocal则用于线程间的数据隔离,主要解决多线程中数据数据因并发产生不一致问题同,它采用了“以空间换时间”的方式。为每一个线程都提供了一份变量,因此可以同时访问而互不影响.
三 具体示例
输出结果如下:
从结果中可以查看到,每个线程之间的数据是完全隔离的,互不影响
总结:ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下, ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性.
1 深入研究java.lang.ThreadLocal类
http://lavasoft.blog.51cto.com/62575/51926
2 java中ThreadLocal类的使用
http://www.niwota.com/submsg/1551983/
3 Java ThreadLocal介绍
http://www.blogjava.net/Ericzhang5231/articles/JavaThreadlocal.html
4 Java中ThreadLocal的设计与使用
http://www.yesky.com/266/1882766.shtml
一 ThreadLocal介绍
ThreadLocal是Thread local variable(线程局部变量),为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量.
二 ThreadLocal与synchronized的区别
ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题
Synchronized用于在多个线程间通信时能够获得数据共享,它利用锁的机制,使变量或代码块在某一时该只能被一个线程访问,采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问,编写比ThreadLocal更加复杂。
ThreadLocal则用于线程间的数据隔离,主要解决多线程中数据数据因并发产生不一致问题同,它采用了“以空间换时间”的方式。为每一个线程都提供了一份变量,因此可以同时访问而互不影响.
三 具体示例
import java.util.Random; public class ThreadLocalTest { public static void main(String[] args) { init(); } private static void init() { for (int i = 0; i < 2; i++) { new Thread(new Runnable() { @Override public void run() { int num = new Random().nextInt(); System.out.println(Thread.currentThread().getName()+",main: " + num); User.getInstance().setAge(num); User.getInstance().setName("name"+num); new TaskA().show(); new TaskB().show(); } }).start(); } } static class TaskA { public void show() { int num = User.getInstance().getAge(); String name = User.getInstance().getName(); System.out.println("A num: " + num + ",name: " + name); } } static class TaskB { public void show() { int num = User.getInstance().getAge(); String name = User.getInstance().getName(); System.out.println("B num: " + num + ",name: " + name); } } } class User{ private String name; private int age; private static ThreadLocal<User> threadLocal = new ThreadLocal<User>(); public static User getInstance(){ User user = threadLocal.get(); if(null == user){ user = new User(); threadLocal.set(user); } return user; } 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; } }
输出结果如下:
Thread-0,main: 1833403530 A num: 1833403530,name: name1833403530 B num: 1833403530,name: name1833403530 Thread-1,main: 1589097477 A num: 1589097477,name: name1589097477 B num: 1589097477,name: name1589097477
从结果中可以查看到,每个线程之间的数据是完全隔离的,互不影响
总结:ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下, ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性.
发表评论
-
java json-lib & jQuery & jsonp
2016-06-30 11:31 771参考链接: 1、http://hanqunfeng.iteye ... -
随机分配算法(Intege)
2016-01-08 13:05 5137参考资料: http://blog.csdn.net/yaer ... -
XSS之xssprotect
2012-12-07 23:03 29347参考资料 1 跨网站脚本 ... -
Java之Thread(线程题)
2011-10-31 12:33 1942特别说明:java线程相关的参考了张孝祥老师的代码 参考资料 ... -
Java之synchronized,wait,notify结合运用示例
2011-10-26 11:54 5889场景一:要求二个线程各 ... -
Java之synchronized深入应用
2011-10-23 08:03 1904参考资料 1 java synchronized详解 http ... -
Java之Timer入门
2011-10-11 15:32 1647参考资料 1 java中timer用 ... -
Java之线程(匿名内部类)
2011-10-10 16:36 163591 Thread对象 Thread t = new Thr ... -
Java之线程(join)
2011-10-10 15:39 1420运用场景:多个线程之间 ... -
Java之线程(synchronized,wait(),notify(),notifyAll())
2011-10-10 15:03 3196参考资料 Java多线程入门大全(适用于有一定基础者) htt ... -
Java之线程(sleep,线程名)
2011-10-10 13:09 9674参考资料 1 Java线程:创建与启动 http://lava ... -
Java之线程入门
2011-10-10 11:11 1500参考资料 1 Java线程:概 ... -
java之表反向生成类
2011-09-23 16:41 3409环境:XP+JDK1.5+Oracle10g 注意事项 1 请 ... -
java之线程, NIO学习资料
2011-09-19 12:13 1090Concurrent In Java 6 第一部分 集合 ... -
Java之BigDecimal
2011-09-15 10:12 17941参考资料 1 java.math.BigDecimal的用法 ... -
java.lang.OutOfMemoryError异常解决方法
2011-08-27 16:47 2053转载:java.lang.OutOfMemoryError异常 ... -
Jcom之jp.ne.so_net.ga2.no_ji.jcom.JComException: createInstance() failed HRESULT=
2011-08-25 12:33 11634参考资料 java应用jcom将word转pdf http:/ ... -
Quartz之AnnualCalendar
2011-08-11 17:14 5764问题1 我想排除一年中 ... -
Quartz之InterruptableJob
2011-08-11 11:03 11729问题1 由于业务需要,停止Quartz中正在执行的任务 Qua ... -
Quartz之JobExecutionException
2011-08-11 10:06 13299问题1 如果你的任务执 ...
相关推荐
你还在用synchronized?线程安全相关知识深入剖析
synchronized关键字不属于方法特征签名的一部分,所以可以在覆盖方法的时候加上去。也就是说,在父类的方法声明上可以没有synchronized关键字,而在子类覆盖该方法时加上synchronized关键字。 注意:使用...
需要重点强调的的是,不要拿ThreadLocal和synchronized做类比,因为这种比较压根是无意义的!sysnchronized是一种互斥同步机制,是为了保证在多线程环境下对于共享资源的正确访问。而ThreadLocal从本质上讲,无非...
主要介绍了Java中的线程同步与ThreadLocal无锁化线程封闭实现,Synchronized关键字与ThreadLocal变量的使用是Java中线程控制的基础,需要的朋友可以参考下
java 学习整理文档 Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定 最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”或者...
2.3 线程本地存储(Java.lang.ThreadLocal) 15 2.4 线程阻塞 17 2.4.1 调用sleep(millisecond)使任务进入休眠状态 17 2.4.2 等待输出与输入 17 2.4.3 对象锁不可用 17 2.4.4 通过wait()使线程挂起。 17 2.5 线程...
1、线程安全和锁 Synchronized 底层实现原理 2、可重入锁与 Synchronized 的其他特性 3、ThreadLocal 的底层实现与使用 4、ReentrantLock底层实现和如何使用 5、Condition源码分析 6、ReentrantReadWriteLock底层...
java并发编程 基础知识,守护线程与线程, 并行和并发有什么区别? 什么是上下文切换? 线程和进程区别 什么是线程和进程? 创建线程有哪几种方式?,如何避免线程死锁 ...ThreadLocal内存泄漏分析与
synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生才会去执行。 CAS。 Hashtable是怎么加锁的。 HashMap的并发问题。 ConcurrenHashMap 介绍。 AQS。 如何检测死锁,怎么预防死锁。 ...
51.ThreadLocal 是什么?有哪些使用场景? 52.说一下 synchronized 底层实现原理? 53.synchronized 和 volatile 的区别是什么? 54.synchronized 和 Lock 有什么区别? 55.synchronized 和 ReentrantLock 区别是...
synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生才会去执行。 CAS。 Hashtable是怎么加锁的。 HashMap的并发问题。 ConcurrenHashMap 介绍。 AQS。 如何检测死锁,怎么预防死锁。 ...
17.并发容器之ThreadLocal 18.一篇文章,从源码深入详解ThreadLocal内存泄漏问题 19.并发容器之BlockingQueue 20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解 21.线程池ThreadPoolExecutor实现...
线程创建、Synchronized和Reentrantlock锁的使用、线程安全问题演示、Condition的应用、CountDownLatch的应用、Cyclicbarrier的应用、Semaphore的应用、线程池的应用、Completablefuture的应用、手写阻塞队列、fork...
ThreadLocal 使用及实现原理.mp4 并发工具类CountDownLatch详解.mp4 并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 CountDownLatch,CyclicBarrier,Semaphore源码解析....
4锁的优化及注意事项 4.1有助于提高锁性能的几点建议 4.2java虚拟机对锁优化所做的努力 4.3人手一支笔:threadlocal 4.4无锁 4.5有关死锁的问题 4.2Java虚拟机对锁优化所做的努力 4.3人手一支笔:ThreadLocal 4.4...
51. ThreadLocal 是什么?有哪些使用场景? 20 52.说一下 synchronized 底层实现原理? 20 53. synchronized 和 volatile 的区别是什么? 21 54. synchronized 和 Lock 有什么区别? 21 55. synchronized 和 ...
第36节ThreadLocal 使用及实现原理00:17:41分钟 | 第37节并发工具类CountDownLatch详解00:22:04分钟 | 第38节并发工具类CyclicBarrier 详解00:11:52分钟 | 第39节并发工具类Semaphore详解00:17:27分钟 | 第40节...
Java并发锁synchronized、reentractlock的用法 HashMap数据结构及原理 ConcurrentHashMap数据结构及原理,分段锁机制 NIO、BIO相关 Java多线程篇: 线程池的核心参数及用法说明? 多线程死锁如何排查(考察linux
第36节ThreadLocal 使用及实现原理00:17:41分钟 | 第37节并发工具类CountDownLatch详解00:22:04分钟 | 第38节并发工具类CyclicBarrier 详解00:11:52分钟 | 第39节并发工具类Semaphore详解00:17:27分钟 | 第40节...