仓酷云

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

[学习教程] JAVA网页编程之一个cache的改革历程仓酷云

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。在散布式的程序中,cache的公道利用能够带来功能上的极年夜提拔,特别是在资本创立必要高贵的开支时。cache的计划最主要的是要包管线程平安和高效性。上面以代码为例,先容了三种cache的写法。
1.集约的加锁
  1. publicclassCache1{privateHashMap<String,ServerGroup>route2SG=null;publicCache1(){route2SG=newHashMap<String,ServerGroup>();}publicsynchronizedServerGroupget(StringrouteKey)throwsIOException{ServerGroupsg=null;sg=route2SG.get(routeKey);if(sg==null){sg=getServerGroup(routeKey);route2SG.put(routeKey,sg);}returnsg;}publicsynchronizedvoidremove(StringrouteKey){route2SG.remove(routeKey);}privateServerGroupgetServerGroup(StringrouteKey)throwsIOException{ServerGroupsg=null;/***ConstructServerGrouphere*/returnsg;}}
复制代码
2.读写锁
  1. publicclassCache2{privateConcurrentHashMap<String,ServerGroup>route2SG=null;privatefinalReadWriteLocklock=newReentrantReadWriteLock();publicCache2(){route2SG=newConcurrentHashMap<String,ServerGroup>();}publicServerGroupget(StringrouteKey)throwsIOException{ServerGroupsg=null;try{lock.readLock().lock();sg=route2SG.get(routeKey);if(sg==null){lock.readLock().unlock();lock.writeLock().lock();sg=route2SG.get(routeKey);if(sg==null){sg=getServerGroup(routeKey);route2SG.put(routeKey,sg);}lock.readLock().lock();lock.writeLock().unlock();}}catch(IOExceptione){lock.writeLock().unlock();throw(e);}lock.readLock().unlock();returnsg;}publicvoidremove(StringrouteKey){try{lock.writeLock().lock();route2SG.remove(routeKey);}finally{lock.writeLock().unlock();}}privateServerGroupgetServerGroup(StringrouteKey)throwsIOException{ServerGroupsg=null;/***ConstructServerGrouphere*/returnsg;}}
复制代码
3.无锁
  1. publicclassCache3{privateConcurrentHashMap<String,FutureTask<ServerGroup>>route2SGFT=null;publicCache3(){route2SGFT=newConcurrentHashMap<String,FutureTask<ServerGroup>>();}publicServerGroupget(StringrouteKey)throwsIOException,InterruptedException,ExecutionException{FutureTask<ServerGroup>ft=route2SGFT.get(routeKey);if(ft!=null){returnft.get();}FutureTask<ServerGroup>sft=newFutureTask<ServerGroup>(newConstructSGTask(routeKey));FutureTask<ServerGroup>old=route2SGFT.putIfAbsent(routeKey,sft);if(old==null){old=sft;old.run();}returnold.get();}publicvoidremove(StringrouteKey){route2SGFT.remove(routeKey);}classConstructSGTaskimplementsCallable<ServerGroup>{privatefinalStringkey;publicConstructSGTask(Stringkey){super();this.key=key;}@OverridepublicServerGroupcall()throwsException{returngetServerGroup(key);}}privateServerGroupgetServerGroup(StringrouteKey)throwsIOException{ServerGroupsg=null;/***ConstructServerGrouphere*/returnsg;}}
复制代码
总结,
从三份代码中能够看出,锁的粒度从集约到无,这个就极年夜的进步了cache的并发性。

j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。
莫相离 该用户已被删除
沙发
发表于 2015-1-20 22:13:07 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
admin 该用户已被删除
板凳
发表于 2015-1-25 16:59:48 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小女巫 该用户已被删除
地板
发表于 2015-2-3 11:53:57 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
分手快乐 该用户已被删除
5#
发表于 2015-2-8 20:34:41 | 只看该作者
是一种为 Internet发展的计算机语言
不帅 该用户已被删除
6#
发表于 2015-2-26 05:57:42 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小魔女 该用户已被删除
7#
发表于 2015-3-8 02:28:48 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
深爱那片海 该用户已被删除
8#
发表于 2015-3-8 07:35:30 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
活着的死人 该用户已被删除
9#
发表于 2015-3-15 21:07:47 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-10 21:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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