WEB开发网
开发学院软件开发Java Java 多线程同步问题的探究(五、你有我有全都有—... 阅读

Java 多线程同步问题的探究(五、你有我有全都有—— ThreadLocal如何解决并发安全性?)

 2010-05-14 00:00:00 来源:WEB开发网   
核心提示: 补疑完毕 ***可见,要正确使用ThreadLocal,Java 多线程同步问题的探究(五、你有我有全都有—— ThreadLocal如何解决并发安全性?)(8),必须注意以下几点:1. 总是对ThreadLocal中的initialValue()方法进行覆盖,2. 当使用set()或get(

**************** 补疑完毕 ***************************

可见,要正确使用ThreadLocal,必须注意以下几点:

1. 总是对ThreadLocal中的initialValue()方法进行覆盖。

2. 当使用set()或get()方法时牢记这两个方法是对当前活动线程中的ThreadLocalMap进行操作,一定要认清哪个是当前活动线程!

3. 适当的使用泛型,可以减少不必要的类型转换以及可能由此产生的问题。

运行该程序,我们发现:程序的执行过程只需要5秒,而如果采用同步的方法,程序的执行结果相同,但执行时间需要15秒。以前是多个线程为了争取一个资源,不得不在同步规则的制约下互相谦让,浪费了一些时间。

现在,采用ThreadLocal机制以后,可用的资源多了,你有我有全都有,所以,每个线程都可以毫无顾忌的工作,自然就提高了并发性,线程安全也得以保证。

当今很多流行的开源框架也采用ThreadLocal机制来解决线程的并发问题。比如大名鼎鼎的 Struts 2.x 和 Spring 等。

把ThreadLocal这样的话题放在我们的同步机制探讨中似乎显得不是很合适。但是ThreadLocal的确为我们解决多线程的并发问题带来了全新的思路。它为每个线程创建一个独立的资源副本,从而将多个线程中的数据隔离开来,避免了同步所产生的性能问题,是一种“以空间换时间”的解决方案。

但这并不是说ThreadLocal就是包治百病的万能药了。如果实际的情况不允许我们为每个线程分配一个本地资源副本的话,同步还是非常有意义的。

好了,本系列到此马上就要划上一个圆满的句号了。不知大家有什么意见和疑问没有。希望看到你们的留言。

下一讲中我们就来对之前的内容进行一个总结,顺便讨论一下被遗忘的volatile关键字。敬请期待。

上一页  3 4 5 6 7 8 

Tags:Java 线程 同步

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接