仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 488|回复: 10
打印 上一主题 下一主题

[学习教程] 发布一篇ThreadLocal的计划与利用

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:26:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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网页编程里有这些工具吗?要简单多少?。
若相依 该用户已被删除
11#
发表于 2015-3-24 02:53:59 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
小女巫 该用户已被删除
10#
发表于 2015-3-17 08:11:24 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
柔情似水 该用户已被删除
9#
发表于 2015-3-10 16:42:46 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
简单生活 该用户已被删除
8#
发表于 2015-3-9 00:13:12 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
变相怪杰 该用户已被删除
7#
发表于 2015-2-27 16:32:13 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
老尸 该用户已被删除
6#
发表于 2015-2-12 10:31:35 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
活着的死人 该用户已被删除
5#
发表于 2015-2-6 10:31:57 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
山那边是海 该用户已被删除
地板
发表于 2015-1-30 11:12:00 来自手机 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
小魔女 该用户已被删除
板凳
发表于 2015-1-25 07:41:28 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-21 06:23:09 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-26 02:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表