JAVA网页编程之一个cache的改革历程仓酷云
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。在散布式的程序中,cache的公道利用能够带来功能上的极年夜提拔,特别是在资本创立必要高贵的开支时。cache的计划最主要的是要包管线程平安和高效性。上面以代码为例,先容了三种cache的写法。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.读写锁
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.无锁
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也是延续着它的拖拽控件的方法,提高速度。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 是一种为 Internet发展的计算机语言 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
页:
[1]