JAVA网站制作之Java Thread Programming 1.8.3 - Inte...
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难CubbyHoleExampleTheclassCubbyHole(seeListing8.9)simulatesacubbyhole.Acubbyholeisaslotthatcanhaveonlyoneiteminitatatime.Onethreadputsanitemintotheslotandanotherthreadtakesitout.Ifathreadtriestoputanitemintoacubbyholethatisalreadyoccupied,thethreadblocksuntiltheslotisavailable.Ifathreadtriestoremoveanitemfromanemptycubbyhole,thethreadblocksuntilanitemisadded.Inthisexample,theslotisareferencetoanobject.Thistechniqueallowsobjectstobehandedofffromonethreadtoanotherinathread-safemanner.CubbyHole是指一个通道,某一时候只能包容一个工具,一个线程放,另外一个线程取。假如已有工具,不克不及再放,直到工具被掏出。假如没有工具,则不克不及取,直到放出来新工具。上面给出一个线程平安的办理计划:CubbyHole.java/**Createdon2005-7-14**JavaThreadProgramming-PaulHyde*Copyright?1999SamsPublishing*JonathanQ.Bo进修条记**/packageorg.tju.msnrl.jonathan.thread.chapter8;/***@authorJonathanQ.BofromTJUMSNRL**Email:jonathan.q.bo@gmail.com*Blog:blog.csdn.net/jonathan_q_bo*blog.yesky.net/jonathanundersun**EnjoyLifewithSun!**/publicclassCubbyHole{privateObjectobj;publicCubbyHole(){obj=null;}publicsynchronizedvoidputIn(Objectobj)throwsInterruptedException{print("putIn()...begin");while(this.obj!=null){//守候,直到数据被掏出print("putIn()wait...begin");wait();print("putIn()wait...end");}this.obj=obj;//增加新对象notifyAll();//关照别的线程:有对象可取print("putIn()...end");}publicsynchronizedObjecttakeOut()throwsInterruptedException{print("takeOut()...begin");while(obj==null){//守候,直到无数据能够取print("takeOut()wait...begin");wait();print("takeOut()wait...end");}Objecttemp=obj;obj=null;//将原数据清空notifyAll();//关照别的线程:数据已掏出,可填新数据print("takeOut()...end");returntemp;}publicvoidprint(Stringmsg){Stringtemp=Thread.currentThread().getName();System.out.println(temp+"-"+msg);}}CubbyHoleMain.java/**Createdon2005-7-14**JavaThreadProgramming-PaulHyde*Copyright?1999SamsPublishing*JonathanQ.Bo进修条记**/packageorg.tju.msnrl.jonathan.thread.chapter8;/***@authorJonathanQ.BofromTJUMSNRL**Email:jonathan.q.bo@gmail.com*Blog:blog.csdn.net/jonathan_q_bo*blog.yesky.net/jonathanundersun**EnjoyLifewithSun!**/publicclassCubbyHoleMain{publicstaticvoidprint(Stringmsg){Stringtemp=Thread.currentThread().getName();System.out.println(temp+"-"+msg);}publicstaticvoidmain(String[]args){finalCubbyHolech=newCubbyHole();RunnablerunA=newRunnable(){publicvoidrun(){try{Thread.sleep(500);//存心晚一些实行,让别的线程先取数据Stringstr;str="multithreads";ch.putIn(str);//可一向存print("run()putIn()"+str);str="programming";ch.putIn(str);print("run()putIn()"+str);str="withjava";ch.putIn(str);print("run()putIn()"+str);}catch(InterruptedExceptione){print("exception"+e.getMessage());}}};RunnablerunB=newRunnable(){publicvoidrun(){try{Objectobj;obj=ch.takeOut();print("run()takeOut()"+obj);Thread.sleep(500);//先取,后存obj=ch.takeOut();//可一向取print("run()takeOut()"+obj);obj=ch.takeOut();print("run()takeOut()"+obj);}catch(InterruptedExceptione){print("exception"+e.getMessage());}}};ThreadthreadA=newThread(runA,"threadA");threadA.start();ThreadthreadB=newThread(runB,"threadB");threadB.start();}}输入了局:threadB-takeOut()...beginthreadB-takeOut()wait...beginthreadA-putIn()...beginthreadA-putIn()...endthreadB-takeOut()wait...endthreadB-takeOut()...endthreadB-run()takeOut()multithreadsthreadA-run()putIn()multithreadsthreadA-putIn()...beginthreadA-putIn()...endthreadA-run()putIn()programmingthreadA-putIn()...beginthreadA-putIn()wait...beginthreadB-takeOut()...beginthreadB-takeOut()...endthreadB-run()takeOut()programmingthreadB-takeOut()...beginthreadB-takeOut()wait...beginthreadA-putIn()wait...endthreadA-putIn()...endthreadA-run()putIn()withjavathreadB-takeOut()wait...endthreadB-takeOut()...endthreadB-run()takeOut()withjavaUsingjoin()toWaitforaThreadtoDieThejoin()methodofThreadcanbeusedtocausethecurrentthreadtoblockwaitingforthespecifiedthreadtodie.Thisisarelativelycrudeformofinter-threadcommunication,butonoccasionitcanbeuseful.IfthreadXrunsthecodejoin()办法使以后线程堵塞,直到指定的线程出生。try{threadY.join()}catch(InterruptedExceptionx){}threadXwillblockwaitingforthreadYtodie.IfthreadXisinterruptedwhileinsidejoin(),itwillthrowanInterruptedException.Therearethreeversionsofthejoin()methodavailableinThread,allofwhicharepublic:join(),join(long),andjoin(long,int).Additionally,noneofthesemethodscanbeoverriddeninasubclassbecausetheyarealldeclaredfinal.在Thread类中,供应了三个函数:join(),join(long),join(long,int),都被声明为final,不成被子类overridejoin()publicfinalvoidjoin()throwsInterruptedExceptionThejoin()methodcausesthecurrentthreadtoblockandwaitanunlimitedamountoftimeforthisthreadtodie.ThecurrentthreadwillthrowanInterruptedExceptionifinterruptedwhilewaitingforthespecifiedthreadtodie.join()堵塞以后线程直至其出生,假如守候时被interrupted,会抛出InterruptedExceptionjoin(long)publicfinalsynchronizedvoidjoin(longmsTimeout)throwsInterruptedException,IllegalArgumentException//RuntimeExceptionThejoin(long)methodcausesthecurrentthreadtoblockandwaituptomsTimeoutmillisecondsforthespecifiedthreadtodie.IfmsTimeoutis0,thecurrentthreadwillnevertimeoutandwillwaitforeverforthespecifiedthreadtodie(justlikejoin()).IfmsTimeoutislessthan0,anIllegalArgumentExceptionisthrown.ThecurrentthreadwillthrowanInterruptedExceptionifinterruptedwhilewaitingforthespecifiedthreadtodie.join(long)使以后线程堵塞必定工夫(毫秒)守候其出生,假如设准时间为0,则无穷守候不会超时,假如参数小于0,会抛出IllegalArgumentException非常join(long,int)准确到纳秒,一样平常假造机未完成此办法JoinDemo/**Createdon2005-7-14**JavaThreadProgramming-PaulHyde*Copyright?1999SamsPublishing*JonathanQ.Bo进修条记**/packageorg.tju.msnrl.jonathan.thread.chapter8;/***@authorJonathanQ.BofromTJUMSNRL**Email:jonathan.q.bo@gmail.com*Blog:blog.csdn.net/jonathan_q_bo*blog.yesky.net/jonathanundersun**EnjoyLifewithSun!**/publicclassJoinDemo{/***天生一个线程*@paramname线程名*@paramnapTime线程存活工夫*@return前往重生成的线程*/publicstaticThreadlaunch(Stringname,longnapTime){finallongsleepTime=napTime;Runnablerun=newRunnable(){publicvoidrun(){try{print("run()...begin");Thread.sleep(sleepTime);}catch(InterruptedExceptione){print("interrupted");}finally{print("run()...end");}}};Threadthread=newThread(run,name);thread.start();//入手下手实行returnthread;}publicstaticvoidprint(Stringmsg){Stringtemp=Thread.currentThread().getName();System.out.println(temp+"-"+msg);}publicstaticvoidmain(String[]args){Thread[]t=newThread;t=launch("threadA",2000);t=launch("threadB",1000);t=launch("threadC",3000);for(inti=0;i<t.length;i++){try{Stringindex="t["+i+"]";Stringname=t.getName();print(name+"isalive?"+t.isAlive());print(name+"beginjoin");longstartTime=System.currentTimeMillis();t.join();longendTime=System.currentTimeMillis();print(name+"endjoin,costs"+(endTime-startTime)+"ms");}catch(InterruptedExceptione){e.printStackTrace();}}}}输入了局:main-threadAisalive?truemain-threadAbeginjointhreadA-run()...beginthreadB-run()...beginthreadC-run()...beginthreadB-run()...endthreadA-run()...endmain-threadAendjoin,costs2000msmain-threadBisalive?falsemain-threadBbeginjoinmain-threadBendjoin,costs0msmain-threadCisalive?truemain-threadCbeginjointhreadC-run()...endmain-threadCendjoin,costs1000ms什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 是一种将安全性(Security)列为第一优先考虑的语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 是一种将安全性(Security)列为第一优先考虑的语言 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
页:
[1]