仓酷云

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

[学习教程] 发布一篇在Java中怎样完成长工夫义务

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:27:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
轮性能微软曾做过一个例子,就是同一个项目用java和.net网页编程来作,结果开发周期,.net网页编程是java的一半,性能java是.net网页编程的十分之一,代码量java是.net网页编程的三倍。呵呵,这说明了什么,.net网页编程的全方位比java好。但是有的人说.net网页编程不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net网页编程很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net网页编程,只是推出了跨语言的.net网页编程,
择要:在软件开辟中,我们常常面对着处置长工夫义务的多线程编程成绩。在我们的ezOne平台的开辟中就多处触及到,如JPC数据服务JPC数据处置服务报警联动门禁体系等。自己在编写DEMO程序的过程当中几易其稿,煞操心机,但仍然感到有很多中央必要改善,为了削减多线程编程带来的风险,我翻译收拾了一个相似成绩的办理计划框架以到达与日俱增。为了便于浏览,保存原文。援用请保存作者和文章来历。
关头词:Thread、Lock、Notification、长工夫义务。
在使用程序中我们常常必要一个类往完成像数据处置、监听事务或反省另外一个类的举动等义务。为了到达这个方针,我们大概利用带有一套锁和动静关照的线程。JAVA线程API已很好的文档化,但为了使线程可以准确而高效地运转,程序员仍旧必要丰厚的编程履历并编写大批的代码。经由过程使用本篇文章中会商的框架,程序员可以制止忍耐煎熬写大批的代码,疾速创立强健的使用程序。2、长工夫运转义务的程序框架。
关于长工夫运转的义务的次要事变是怎样在使用程序的性命期使它一向坚持运转。完成的得当办法是供应一个线程来实行这个特定的义务。我们能够经由过程承继Thread类或完成java.lang.Runnable接口来到达该方针。假如接纳完成Runnable接口的体例,就能够可以取得更好的面向对象的计划,同时能够制止JAVA中的单承继成绩。别的,我们也能更无效的处置Runnable实例(比方利用线程池一般必要一个Runnable实例而不是线程来运转)。
框架的基本是一个叫Worker的笼统类,它完成了Runnable接口,并供应了无效处置义务的好办法。这些办法有些已被完成,如run()办法,但有些是笼统办法,开辟职员必需本人来完成。假如要创立一个长工夫运转的类,你只必要承继Worker类并完成几个笼统办法。让我们看看这些办法的细节。
Worker类的run()办法被计划成只需一直止运转就延续的实行work()办法。work()办法能够卖力数据处置、事务呼应、文件读写、,实行SQL命令等操纵。如许work()办法可以抛出非常,并将非常传给run(),然后由run()办法来处置这些非常。
run()办法有表里两层try-catch语句:一层处于while-loop轮回外,一层在while-loop轮回内。前一个try-catch用于捕捉非编程非常以确保run()办法不加入。后一个try-catch语句捕捉关于营业逻辑和响应举动的各类非常。假如在work()办法中产生了一些守候操纵(比方守候一个输出流或一个Socket),抛出一个InterruptedException的办法是可取的。要记着的是只需使用程序在运转,work()办法不必要任何while-loop轮回往保持它运转,这统统由Worker代庖了。
run()入手下手时,挪用prepareWorker()办法来筹办长工夫运转义务必要的一切资本(参考程序清单A)。比方,在这个办法中能够翻开一个将要用到的数据库毗连或文件。特别关于那些像创建一个socket如许的堵塞操纵放在这儿是很好的。由于若让它们在一个自力的线程中运转,则不会堵塞主线程的实行。
与后面办法相反的是releaseWorker(),它在run()办法筹办加入时被挪用(参考程序清单A)。在该办法中你能够编写那些开释体系资本或实行别的扫除举措的代码。该办法相似于java.lang.Object.finalize(),但它在线程中断时被显式的挪用。
3、框架中的毛病处置机制
另外一个主要的办法是handleError(),它带有一个java.lang.Throwable的输出参数。在run()办法每次产生毛病时挪用这个办法。这依附于你怎样完成毛病处置。办法之一是写毛病日记并经由过程挪用halt()办法中断义务(参考程序清单A)。
isCondition()办法用于判别work()办法是不是可以被实行。因而同意细粒度地把持义务。这在事务触发的框架中十分有效。当work()办法的实行前提未满意时,work办法将被挂起,直到前提完整满意(比方,缓存区非空)。在Worker的完成中这个前提将按在办法setTimeout()中指定的工夫周期地反省一个锁关照。假如在义务中不必要任多么待堵塞,仅仅只需使isCondition()办法老是前往真值。
4、义务停止机会
你还必要isRunning(),broadcast(),halt()办法。经由过程会见isRunning()办法,你将能反省某个义务是不是正在运转,并决意是不是中断它。broadcast()办法准确地关照锁对象,而且假如这个对象一向守候这个锁,那末就激活这个义务。halt()办法中断一个义务,因而下一isRunning()形态一旦被挪用,run()办法就加入,由于这个办法只关照谁人大概堵塞这个义务线程的锁。当在work()办法中实行堵塞功课时用不异的锁是明智的。假如你不克不及用不异的锁对象时,比方在实行java.io.InputStream.read()办法碰到堵塞时,你就应当增加一切大概锁的显式关照大概增添java.lang.Thread.interrupt()到halt()中。假如一个你堵塞的对象被准确处置,java.lang.Thread.interrupt()将会起感化。比方,它在InputStream.read()实行时有感化,但在实行java.sql.PreparedStatement.execute()不起感化,因而在每一个特别的前提下你必需测试halt()办法。
一旦你熟习Worker类,你就很简单创立你本人的完成(参考程序清单B),为了把这类看成一个线程运转,仅仅只需复杂地利用newThread(newWaitedWorker()).start。使用Thread.interrupt()或Worker.halt()或它们的组合,你就能够正确的把持义务的实行。比方当JVM经由过程在java.lang.Runtime.addShutdownHook()办法中放响应的代码中断时,你就可以中断一切的义务。
5、结论
我们已反省了长工夫运转义务框架,而且看到如何经由过程从创立一个基于它的笼统类的义务。它的构架是明晰和天真的,而且被计划成可扩大的。用这个框架你能制止为创作类而挖空心思,而且匡助你可以开辟出高效、牢靠的使用程序。

其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
简单生活 该用户已被删除
沙发
发表于 2015-1-24 15:35:47 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-28 07:51:18 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
透明 该用户已被删除
地板
发表于 2015-2-2 16:01:45 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-2 22:00:41 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-3 19:47:24 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
若相依 该用户已被删除
7#
发表于 2015-2-4 13:44:37 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
谁可相欹 该用户已被删除
8#
发表于 2015-2-10 00:45:10 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
因胸联盟 该用户已被删除
9#
发表于 2015-2-10 07:36:15 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
飘飘悠悠 该用户已被删除
10#
发表于 2015-3-1 03:06:44 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
兰色精灵 该用户已被删除
11#
发表于 2015-3-2 18:28:23 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
再见西城 该用户已被删除
12#
发表于 2015-3-4 05:11:00 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
分手快乐 该用户已被删除
13#
发表于 2015-3-7 02:01:36 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
活着的死人 该用户已被删除
14#
发表于 2015-3-14 00:51:33 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
飘灵儿 该用户已被删除
15#
发表于 2015-3-20 22:58:06 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-28 13:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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