仓酷云
标题:
发布一篇ThreadLocal的计划与利用
[打印本页]
作者:
灵魂腐蚀
时间:
2015-1-18 11:26
标题:
发布一篇ThreadLocal的计划与利用
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。
早在Java1.2推出之时,Java平台中就引进了一个新的撑持:java.lang.ThreadLocal,给我们在编写多线程程序时供应了一种新的选择。利用这个工具类能够很简便地编写出幽美的多线程程序,固然ThreadLocal十分有效,可是仿佛如今懂得它、利用它的伴侣还未几。
ThreadLocal是甚么
ThreadLocal是甚么呢?实在ThreadLocal并不是是一个线程的当地完成版本,它并非一个Thread,而是threadlocalvariable(线程部分变量)。大概把它定名为ThreadLocalVar加倍符合。线程部分变量(ThreadLocal)实在的服从十分复杂,就是为每个利用该变量的线程都供应一个变量值的正本,是每个线程都能够自力地改动本人的正本,而不会和别的线程的正本抵触。从线程的角度看,就仿佛每个线程都完整具有该变量。线程部分变量并非Java的新创造,在别的的一些言语编译器完成(如IBMXLFORTRAN)中,它在言语的条理供应了间接的撑持。由于Java中没有供应在言语条理的间接撑持,而是供应了一个ThreadLocal的类来供应撑持,以是,在Java中编写线程部分变量的代码绝对对照愚笨,这大概是线程部分变量没有在Java中失掉很好的提高的一个缘故原由吧。
ThreadLocal的计划
起首看看ThreadLocal的接口:
Objectget();//前往以后线程的线程部分变量正本protectedObjectinitialValue();//前往该线程部分变量确当前列程的初始值voidset(Objectvalue);//设置以后线程的线程部分变量正本的值
ThreadLocal有3个办法,个中值得注重的是initialValue(),该办法是一个protected的办法,明显是为了子类重写而特地完成的。该办法前往以后线程在该线程部分变量的初始值,这个办法是一个提早挪用办法,在一个线程第1次挪用get()大概set(Object)时才实行,而且仅实行1次。ThreadLocal中切实其实实完成间接前往一个null:
protectedObjectinitialValue(){returnnull;}
ThreadLocal是怎样做到为每个线程保护变量的正本的呢?实在完成的思绪很复杂,在ThreadLocal类中有一个Map,用于存储每个线程的变量的正本。好比上面的示例完成:
publicclassThreadLocal
{
privateMapvalues=Collections.synchronizedMap(newHashMap());
publicObjectget()
{
ThreadcurThread=Thread.currentThread();
Objecto=values.get(curThread);
if(o==null&&!values.containsKey(curThread))
{
o=initialValue();
values.put(curThread,o);
}
returno;
}
publicvoidset(ObjectnewValue)
{
values.put(Thread.currentThread(),newValue);
}
publicObjectinitialValue()
{
returnnull;
}
}
固然,这并非一个产业强度的完成,但JDK中的ThreadLocal的完成整体思绪也相似于此。
<p>
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net网页编程里有这些工具吗?要简单多少?。
作者:
愤怒的大鸟
时间:
2015-1-21 06:23
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
小魔女
时间:
2015-1-25 07:41
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
山那边是海
时间:
2015-1-30 11:12
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者:
活着的死人
时间:
2015-2-6 10:31
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者:
老尸
时间:
2015-2-12 10:31
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者:
变相怪杰
时间:
2015-2-27 16:32
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者:
简单生活
时间:
2015-3-9 00:13
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
柔情似水
时间:
2015-3-10 16:42
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
小女巫
时间:
2015-3-17 08:11
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
若相依
时间:
2015-3-24 02:53
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2